我相信以下内容有一个合理的解释,但我仍然有点困惑。用堆字符串连接堆栈字符串给出奇怪的结果
问题是一个函数创建一个_TCHAR[CONSTANT]
,一个_TCHAR*
,连接它们并返回结果。
由于某种原因,从_tmain()
调用whatTheHeck()
返回乱码。
_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()
连接内存地址而不是它们的内容并返回清除堆栈?
分配内存'what'指向泄漏,而不是乱码的原因。 –
我假设'_tcscat'像'strcat'一样工作,在这种情况下,结果的赋值应该可以,尽管冗余(目标指针不会被修改)。 – visitor
它像'strcat'一样工作。 –