字符串到 LPCTSTR [重复]

Posted

技术标签:

【中文标题】字符串到 LPCTSTR [重复]【英文标题】:string to a LPCTSTR [duplicate] 【发布时间】:2012-03-25 18:14:33 【问题描述】:

可能重复:C++ std::string conversion problem on WindowsHow to convert std::string to LPCSTR?

我想将一个窗口 ( WM_SETTEXT ) 重命名为其他名称。有一个包含新窗口名称的 std::string 。我需要将 std::string 转换为“LPCTSTR”,这是因为 SendMessage 需要“LPCTSTR”中的名称。

我无法让它工作,有人可以帮我将字符串转换为 LPCTSTR 吗?

【问题讨论】:

C++ std::string conversion problem on Windows 或 ***.com/questions/1200188/… 的可能重复项,或此页面上的许多其他“相关”问题。 你的程序是用Unicode还是ANSI模式编译的?这会影响LPCTSTR 的真正含义。 使用 SetWindowTextA() 是快速修复。 哦@Hans,不要鼓励 ANSI 文本的邪恶! ;-) 【参考方案1】:

使用std::stringc_str() 方法。这将返回一个 C 字符串,即一个指向以 null 结尾的字符数组的指针。

SendMessage(Handle, WM_SETTEXT, 0, (LPARAM)str.c_str());

如果您正在为 ANSI 编译,这很好。如果您正在为 Unicode 编译,那么您应该使用 wstring 而不是 string。如果是这种情况,只需更改为 wstring,对 SendMessage 的调用就可以完全按照上面的说明进行。

【讨论】:

如果我这样做,那么我的窗口会得到一个奇怪的名称“?????_|” 那是因为 ANSI 和 Unicode 不匹配。如果您以 Unicode 为目标,请使用 wstring。如果您使用 ANSI,请使用 string。我强烈建议您不要在 2012 年使用 ANSI。为 Unicode 构建您的应用程序并使用 wstring。根本不要理会TCHAR,在我看来,它只会让人感到困惑,没有明显的收获。

以上是关于字符串到 LPCTSTR [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 const char* 转换为 LPCTSTR

无法从“const char *”转换为“LPCTSTR”

c++字符串LPCTSTR格式转化为char*

string 转 LPCTSTR

int转LPCTSTR

char*”类型的值不能用于初始化“LPTSTR , Const char*”类型的值不能用于初始化“LPCTSTR