如何从wchar_t*转换为wstring

How do I convert from a wchar_t* to a wstring?

本文关键字:转换 wstring wchar      更新时间:2023-10-16

或者如何使用wchar_t*初始化wstring?

我试过这样的东西,但不太管用。我得到了一个LPVOID,它指向一个wchar_t指针。我只想把它放到一个wstring中,这样我就可以在上面使用一些普通的字符串函数

LPVOID lpOutBuffer = NULL;
//later in code this is initialized this way
lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)];
//fills up the buffer
doStuff(lpOutBuffer, &dwSize);
//try to convert it to a wstring
wchar_t* t =  (wchar_t*)lpOutBuffer;
wstring responseHeaders = wstring(t);
printf("This prints response headers: n%S", t);
printf("This prints nothing: n%S", responseHeaders);

doStuff实际上是对WinHttpQueryHeaders的调用我只是把它改了,让它更容易理解我的例子。

wstring对象传递给printf是行不通的。将第二条prinf线重新表述为

printf("This prints nothing: n%S", responseHeaders.c_str()); 

c_str()为您提供一个指向底层字符串数据的const指针。

如果LPVOID指向wchar_t指针,则您的间接级别是错误的。

LPVOID lpOutBuffer;
wchar_t** t =  (wchar_t**)lpOutBuffer;
wstring responseHeaders = wstring(*t);

编辑:问题已更改。这个答案不再适用

再说一遍,太复杂了。只需这样做:

std::wstring TheNewWideString = std::wstring(TheOldWideCharacterTPointer);

它直接适用于我的Microsoft Windows与C++11和CodeBlocks。