const char *到LPTSTR

时间:2009-09-11 20:58:08

标签: c++

我试图调用一个接受LPTSTR作为参数的函数。我用字符串文字调用它,如foo(“bar”);

我收到错误,我“无法将参数1从'const char [3]'转换为'LPTSTR'”,但我不知道为什么或如何修复它。任何帮助都会很棒。

3 个答案:

答案 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尝试更改传递给它的数据时,将如上所述崩溃。