C ++ - 如何从String转换为TCHAR *?

时间:2013-05-15 04:49:48

标签: c++

这是我的代码:

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

出于某种原因,我使用此代码获得了堆损坏断言。我试图弄清楚可能出错的问题。我找不到任何关于字符串和字符串之间相同点和不同点的好文档,这些文档可以帮助我自己解决这个问题。

3 个答案:

答案 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。