Объединение строки стека со строкой кучи дает странные результаты

Я уверен, что следующее имеет рациональное объяснение, но, тем не менее, я немного сбит с толку.

проблема связана с функцией, которая создает _TCHAR [CONSTANT] , _TCHAR * , объединяет их и возвращает результат.

По какой-то причине вызов whatTheHeck ( ) из _tmain () возвращает тарабарщину.

_TCHAR* whatTheHeck(_TCHAR* name) {
    _TCHAR Buffer[BUFSIZE];
    DWORD dwRet;
    dwRet = GetCurrentDirectory(BUFSIZE, Buffer);
    _TCHAR* what = new _TCHAR[BUFSIZE];
    what = _tcscat(Buffer, TEXT("\\"));
    what = _tcscat(what, name);
    return what;
}

int _tmain(int argc, _TCHAR* argv[]) {

    _TCHAR* failure = whatTheHeck(TEXT("gibberish);")); // not again ..
    _tprintf(TEXT("|--> %s\n"), failure);

    _TCHAR* success = createFileName(TEXT("readme.txt")); // much better
    _tprintf(TEXT("|--> %s\n"), success);

    return 0;
}

Напротив, при использовании кучи все работает, как ожидалось.

_TCHAR* createFileName(_TCHAR* name) {
    _TCHAR* Buffer = new _TCHAR[BUFSIZE];
    DWORD dwRet;
    dwRet = GetCurrentDirectory(BUFSIZE, Buffer);
    Buffer = _tcscat(Buffer, TEXT("\\"));
    Buffer = _tcscat(Buffer, name);
    return Buffer;
}

Почему разница?

Это потому, что _tcscat () объединяет адреса памяти вместо их содержимого и возвращает очищает стек?

9
задан Saul 31 July 2011 в 09:26
поделиться