我正在尝试编写一个将字符串转换为LPCWSTR的函数。这就是我所拥有的:
LPCWSTR stoLPCWSTR(string str)
{
wstring w(str.begin(), str.end());
return w.c_str();
}
我已通过调试运行此代码,并且在返回行,传输的字符串安全地位于w中。但是,当它返回时,它看起来像这样:
“وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو ووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووꑯ䎕骙ᰀ䪀ɽ绐ɽ▼ཛE“
...基本上,垃圾。我做错了什么?
答案 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已超出范围,您将返回指向它的指针。这就是你弄垃圾的原因。