Я уверен, что следующее имеет рациональное объяснение, но, тем не менее, я немного сбит с толку.
проблема связана с функцией, которая создает _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 ()
объединяет адреса памяти вместо их содержимого и возвращает очищает стек?