无法从'const char *'转换为'LPCTSTR'

cannot convert from 'const char *' to 'LPCTSTR'

本文关键字:转换 LPCTSTR char const      更新时间:2023-10-16

我正在尝试将字符串转换为'lpctstr',但是,我有以下错误。

错误:

cannot convert from 'const char *' to 'LPCTSTR'

代码:

std::string str = "helloworld";
LPCTSTR lp = str.c_str();

也尝试:

LPCTSTR lp = (LPCTSTR)str.c_str();

但是,打印垃圾值。

LPCTSTR表示(长指向常数TCHAR字符串(。

TCHAR可以根据您的项目设置为wchar_tchar

如果在您的项目设置中,在"常规"选项卡中,您的字符集为"使用多字节字符集",那么TCHARchar的别名。但是,如果设置为"使用Unicode字符集",则TCHARwchar_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的typedefs。在您的情况下,请这样做:

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();