PCL*_*PCL 1 c++ wchar-t string-conversion
我已经构建了一个字符串wstringstream,需要将其分配给一个struct类型的成员LPWSTR.我尝试使用my_stringstream.str().c_str()但得到以下编译时错误:
无法从'const wchar_t*'转换为'LPWSTR'
我怎样才能做到这一点?当我尝试在GUI中显示字符串时,我尝试了许多不同的强制转换组合,其中包含更多编译时错误或随机行话.
您的函数需要一个指向可修改数据的指针,即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)
LPWSTR在typedefd为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的答案.
| 归档时间: |
|
| 查看次数: |
13138 次 |
| 最近记录: |