其他分享
首页 > 其他分享> > c-无法从’const char *’转换为’LPCTSTR’

c-无法从’const char *’转换为’LPCTSTR’

作者:互联网

我正在尝试将字符串转换为“ 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_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();

这就是为什么出现错误的原因:

cannot convert from ‘const char *’ to ‘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();

标签:tchar,widestring,c,windows,visual-studio
来源: https://codeday.me/bug/20191010/1886325.html