我试图调用一个接受LPTSTR作为参数的函数。我用字符串文字调用它,如foo(“bar”);
我收到错误,我“无法将参数1从'const char [3]'转换为'LPTSTR'”,但我不知道为什么或如何修复它。任何帮助都会很棒。
答案 0 :(得分:7)
您可能已定义UNICODE,并且LPTSTR会扩展为wchar_t *。将TEXT宏用于字符串文字以避免出现问题,例如: foo(TEXT("bar"))
。
答案 1 :(得分:2)
LPTSTR是指向TCHAR的非const指针。反过来,TCHAR在ANSI构建中定义为char,在Unicode构建中定义为wchar_t(定义了UNICODE和/或_UNICODE符号)。
因此,LPTSTR相当于:
TCHAR foo[] = _T("bar");
由于它不是const,你不能用文字安全地调用它 - 文字可以在只读内存段中分配,而LPTSTR是被调用者可以改变字符串内容的信号,例如
void truncate(LPTSTR s)
{
if (_tcslen(s) > 4)
s[3] = _T('\0');
}
如果在使用Visual C ++ 2008编译时传入文字,那将会崩溃。
答案 2 :(得分:0)
foo(const_cast<LPTSTR>("bar"));
当foo尝试更改传递给它的数据时,将如上所述崩溃。