C ++ - 在字符串和LPCWSTR之间转换

时间:2013-05-15 07:54:50

标签: c++ type-conversion

我正在尝试编写一个将字符串转换为LPCWSTR的函数。这就是我所拥有的:

LPCWSTR stoLPCWSTR(string str)
{
    wstring w(str.begin(), str.end());
    return w.c_str();
}

我已通过调试运行此代码,并且在返回行,传输的字符串安全地位于w中。但是,当它返回时,它看起来像这样:

“وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو ووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووꑯ䎕骙ᰀ䪀ɽ绐ɽ▼ཛE“

...基本上,垃圾。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的宽字符串w在函数末尾超出范围并被销毁。

c_str()返回的值不再指向有效数据。

返回宽字符串,并仅在需要的位置使用c_str()

wstring stows(string str)
{
    return wstring(str.begin(), str.end());
}

//...

wstring ws = stows("hello");

api_call_needing_LPCWSTR(ws.c_str());

答案 1 :(得分:2)

你在这里重新调整未分配的内存; wstring已超出范围,您将返回指向它的指针。这就是你弄垃圾的原因。