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

时间:2018-03-30 13:44:26

标签: c++ windows visual-studio tchar widestring

我正在尝试将字符串转换为'LPCTSTR',但是,我收到了以下错误。

错误:

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

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

另外,尝试过:

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

但是,打印垃圾值。

1 个答案:

答案 0 :(得分:5)

LPCTSTR表示(指向常量TCHAR字符串的长指针)。

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

如果在项目设置的“常规”选项卡中,您的字符集为“使用多字节字符集”,则TCHARchar的别名。但是,如果将其设置为“使用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();