如何将std::wstring转换为常量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();

最新更新