这是我的代码:
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
出于某种原因,我使用此代码获得了堆损坏断言。我试图弄清楚可能出错的问题。我找不到任何关于字符串和字符串之间相同点和不同点的好文档,这些文档可以帮助我自己解决这个问题。
答案 0 :(得分:1)
_tcslen(tch)
给出了错误的结果,因为此时tch
未初始化。我假设你应该传递str.length() + 1
(缓冲区的大小)。
答案 1 :(得分:0)
在初始化其内容之前,您尝试在tch上使用_tcslen
。
从你想要的东西看起来更接近:
mbstwcs_s(NULL, tch, str.length(), str.c_str(), str.length());
答案 2 :(得分:0)
如果您询问C ++使用ATL string conversion classes而不是手动内存管理和WinApi调用:
string str = "Hello!";
CA2T tstr(str.c_str());
SomeFunctionT(tstr);
您也可以使用这些内联类:
string str = "Hello!";
SomeFunctionT(CA2T(str.c_str()));
注意:您需要包含atlbase.h。