Jay*_*esh -2 c++ windows tchar widestring visual-studio
我正在尝试将字符串转换为'LPCTSTR',但是,我得到了以下错误.
错误:
cannot convert from 'const char *' to 'LPCTSTR'
Run Code Online (Sandbox Code Playgroud)
码:
std::string str = "helloworld";
LPCTSTR lp = str.c_str();
Run Code Online (Sandbox Code Playgroud)
还试过:
LPCTSTR lp = (LPCTSTR)str.c_str();
Run Code Online (Sandbox Code Playgroud)
但是,打印垃圾值.
LPCTSTR表示(指向常量TCHAR字符串的长指针).
A TCHAR可以是wchar_t或char基于您的项目设置.
如果在项目设置的"常规"选项卡中,您的字符集是"使用多字节字符集",那么TCHAR它是别名char.但是,如果将其设置为"使用Unicode字符集",TCHAR则为别名wchar_t.
您必须使用Unicode字符集,因此:
LPCTSTR lp = str.c_str();
Run Code Online (Sandbox Code Playgroud)
实际上是:
// c_str() returns const char*
const wchar_t* lp = str.c_str();
Run Code Online (Sandbox Code Playgroud)
这就是你收到错误的原因:
无法从'const char*'转换为'LPCTSTR'
你的路线:
LPCTSTR lp = (LPCTSTR)str.c_str();
Run Code Online (Sandbox Code Playgroud)
实际上是:
const wchar_t* lp = (const wchar_t*) std.c_str();
Run Code Online (Sandbox Code Playgroud)
在a中std::string,字符是单个字节,wchar_t*对它们有一个点将指望每个字符代替2个字节.这就是为什么你会得到无意义的价值观.
最好的办法是Hans Passant建议 - 不要使用基于的typedef TCHAR.在您的情况下,请改为:
std::string str = "helloworld";
const char* lp = str.c_str(); // or
LPCSTR lp = str.c_str();
Run Code Online (Sandbox Code Playgroud)
如果你想使用Windows调用Unicode的宽字符,那么你可以这样做:
std::wstring wstr = L"helloword";
const wchar_t* lp = wstr.c_str() // or
LPCWSTR lp = wstr.c_str();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |