0

这是我的代码:

string str = "Hello!";
TCHAR* tch = new TCHAR[str.length() + 1];
mbstowcs_s(NULL, tch, _tcslen(tch), str.c_str(), str.length());
// Use tch for other stuff...
delete [] tch; // Gives debug heap corruption assertion

出于某种原因,我收到此代码的堆损坏断言。我绞尽脑汁想弄清楚可能出了什么问题。对于字符串和 tchars 之间的异同,我找不到任何好的文档来帮助我自己解决这个问题。

4

3 回答 3

1

_tcslen(tch)给出错误的结果,因为tch此时未初始化。我假设您应该在那里传递str.length() + 1(缓冲区的大小)。

于 2013-05-15T04:54:26.343 回答
0

如果您询问 C++,请使用ATL 字符串转换类,而不是手动内存管理和 WinApi 调用:

string str = "Hello!";
CA2T tstr(str.c_str());

SomeFunctionT(tstr);

您也可以内联使用这些类:

string str = "Hello!";

SomeFunctionT(CA2T(str.c_str()));

注意:您需要包含 atlbase.h。

于 2013-05-15T05:15:35.623 回答
0

在初始化其内容之前,您正在尝试使用_tcslenon tch 。

从你想要更接近的东西的外观来看:

mbstwcs_s(NULL, tch, str.length(), str.c_str(), str.length());
于 2013-05-15T04:54:41.257 回答