如何将 std::wstring 转换为 const TCHAR*?

问题描述

我有以下 wstring:

std::wstring testVal("Test");

我需要将其放入此值中:

 static const TCHAR* s_test_val;

到目前为止我已经尝试过:

 static const TCHAR* s_test_val = (const wchar_t*) testVal.c_str();
 static const TCHAR* s_test_val = (wchar_t*) testVal.c_str();
 static const TCHAR* s_test_val = (TCHAR*) testVal.c_str();
 static const TCHAR* s_test_val = (TCHAR*) testVal;

但没有成功; s_test_val 一直显示为空字符串。

解决方法

static const TCHAR* s_test_val = testVal.c_str();

如果定义了 UNICODE,则此方法是正确的,在这种情况下,TCHAR 将是 wchar_t 的别名。

如果 UNICODE 未定义,则您需要执行一些转换,但支持非 unicode 构建的努力可能不值得。在这种情况下,您使用强制转换的尝试会默默地做错误的事情,而这会安全地产生错误。

如果您不关心非 unicode 支持(我想不出任何人会关心的原因),那么我建议您尽量减少对 TCHAR 的完全使用。

,

除非 Windows 9x 支持必不可少,否则不要使用 TCHAR。此外,指向自动变量的静态指针非常可疑。你要么想要:

static wchar_t constexpr const*  s_test_val = L"Test";

std::wstring testVal = L"Test";
wchar_t const* s_test_val = testVal.c_str();

std::wstring testVal = L"Test";
auto const s_test_val = testVal.c_str();