std :: wstring.c_str()返回一个wchar_t *。
如何从wchar_t *到TCHAR *,或从std :: wstring到TCHAR *
由于
答案 0 :(得分:6)
使用它:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
答案 1 :(得分:4)
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
在ANSI或Unicode版本中做正确的事情。
答案 2 :(得分:2)
如果定义了UNICODE,TCHAR *被定义为wchar_t *,否则它是char *。所以你的代码看起来像这样:
wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif
答案 3 :(得分:2)
在一般中这是不可能的,因为wchar_t可能与TCHAR的大小不同。
已经列出了几种用于在字符集之间进行转换的解决方案。如果字符集与转换范围重叠,则这些可以工作。
我更愿意尽可能完全回避问题,并使用在TCHAR字符集上定义的标准字符串,如下所示:
typedef std::basic_string<TCHAR> tstring;
使用此功能,您现在可以使用与Windows TCHAR宏兼容的标准库兼容字符串。
答案 4 :(得分:1)
您可以使用:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
答案 5 :(得分:0)
假设您在Windows上运行。
如果您使用的是Unicode构建配置,则TCHAR
和wchar_t
是相同的。您可能需要一个强制转换,具体取决于您是否为wchar_t
设置了/ Z是一种类型,而wchar_t是一个typedef。
如果您处于多字节构建配置中,则需要MultiByteToWideChar
(反之亦然)。