wstringstream到LPWSTR

PCL*_*PCL 1 c++ wchar-t string-conversion

我已经构建了一个字符串wstringstream,需要将其分配给一个struct类型的成员LPWSTR.我尝试使用my_stringstream.str().c_str()但得到以下编译时错误:

无法从'const wchar_t*'转换为'LPWSTR'

我怎样才能做到这一点?当我尝试在GUI中显示字符串时,我尝试了许多不同的强制转换组合,其中包含更多编译时错误或随机行话.

Ker*_* SB 9

您的函数需要一个指向可修改数据的指针,即wchar_t*标准字符串类只暴露指向常量的指针.假设你的函数实际上可能写入内存,我们需要为它提供一个有效的指针.

获取可修改缓冲区的简单方法是vector:

std::vector<wchar_t> buf(mystring.begin(), mystring.end());
buf.push_back(0);                 // because your consumer expects null-termination

crazy_function(buf.data());
crazy_function(&buf[0]);          // old-style

// need a string again?
std::wstring newstr(buf.data());  // or &buf[0]
Run Code Online (Sandbox Code Playgroud)


Set*_*gie 6

LPWSTRtypedefd为1 wchar_t*.你正在尝试将a转换const wchar_t*为a wchar_t*.你不能隐含地这样做.

您可以通过使用来解决这个问题const_cast,但前提是您确定该函数不会修改内存:

wstring str = my_stringstream.str();
LPWSTR str = const_cast<LPWSTR>(str.c_str());
Run Code Online (Sandbox Code Playgroud)

请注意,您不想这样做 const_cast<LPWSTR>(my_stringstream.str().c_str())(除非您将其传递给函数),因为这将创建一个临时字符串对象,获取它的指针,将其转换为a LPWSTR然后您获得的临时字符串str()将在末尾被销毁那一行,让你LPWSTR指向一个解除分配的内存块.

如果您传递的功能LPWSTR,以进行修改字符串,见Kerrek的答案.