【发布时间】:2011-10-15 20:33:42
【问题描述】:
我相信下面有一个合理的解释,但我还是有点困惑。
问题在于创建_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() 连接了内存地址而不是它们的内容并返回清除了堆栈?
【问题讨论】:
标签: c++ windows string memory-management tchar