无法从“const char *”转换为“LPCTSTR”
Posted
技术标签:
【中文标题】无法从“const char *”转换为“LPCTSTR”【英文标题】:cannot convert from 'const char *' to 'LPCTSTR' 【发布时间】:2018-03-30 13:44:25 【问题描述】:我正在尝试将字符串转换为“LPCTSTR”,但是出现以下错误。
错误:
cannot convert from 'const char *' to 'LPCTSTR'
代码:
std::string str = "helloworld";
LPCTSTR lp = str.c_str();
也试过了:
LPCTSTR lp = (LPCTSTR)str.c_str();
但是,打印垃圾值。
【问题讨论】:
记住str.c_str()
的返回是临时的,你也不应该在这里投。
您的构建系统中是否定义了UNICODE
,所以LPCTSTR
是LPCWSTR
?如果是这样:考虑使用std::wstring
。
你调查过LPCTSTR
到底是什么吗?
停止使用 TCHAR 类型,它们在十多年前就不再有意义了。使用 mbstowcs() 或 MultiByteToWideChar() 将 char 字符串转换为 utf16。或者在这个 sn-p 中始终使用 wchar_t,std::wstring。
【参考方案1】:
LPCTSTR
表示(指向常量TCHAR
字符串的长指针)。
TCHAR
可以是 wchar_t
或 char
,具体取决于您的项目设置。
如果在您的项目设置中的“常规”选项卡中,您的字符集是“使用多字节字符集”,那么TCHAR
是char
的别名。但是,如果将其设置为“使用 Unicode 字符集”,则 TCHAR
是 wchar_t
的别名。
您必须使用 Unicode 字符集,所以:
LPCTSTR lp = str.c_str();
在现实中:
// c_str() returns const char*
const wchar_t* lp = str.c_str();
这就是您收到错误的原因:
无法从“const char *”转换为“LPCTSTR”
您的线路:
LPCTSTR lp = (LPCTSTR)str.c_str();
在现实中:
const wchar_t* lp = (const wchar_t*) std.c_str();
在std::string
中,字符是单字节,wchar_t*
指向它们将期望每个字符是 2+ 字节。这就是为什么你会得到无意义的值。
最好的办法是按照 Hans Passant 的建议 - 不要使用基于 TCHAR
的 typedef。在您的情况下,请改为:
std::string str = "helloworld";
const char* lp = str.c_str(); // or
LPCSTR lp = str.c_str();
如果你想使用宽字符,Windows 称之为 Unicode,那么你可以这样做:
std::wstring wstr = L"helloword";
const wchar_t* lp = wstr.c_str() // or
LPCWSTR lp = wstr.c_str();
【讨论】:
相关链接:Is TCHAR still relevant?以上是关于无法从“const char *”转换为“LPCTSTR”的主要内容,如果未能解决你的问题,请参考以下文章
error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”
error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”
vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决
vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决
c++ 从 LPCTSTR 转换为 const char *
error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [9]”转换为“LPCTSTR”