2012-01-18 105 views
2

或者如何使用wchar_t *初始化一个wstring?如何将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 呼叫我只是改变它,使其更容易理解我的例子。

+2

应该工作 - 'wstring'有一个构造函数。你得到了什么?此外,缓冲区是否以null结尾? – 2012-01-18 19:34:21

+0

我更新了初始化指针的代码。我是新来的C++,所以我仍然围绕着指针等。我不知道wchar_t是否以null结尾。我打电话给WinHttpQueryHeaders功能 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384102(v=vs.85).aspx我不知道它是否为null终止缓冲区。 – ScArcher2 2012-01-18 19:40:29

+1

@ ScArcher2:“这不太合适”是什么意思? – 2012-01-18 19:42:23

回答

3

wstring对象传递给printf是不行的。改写第二prinf线

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

c_str()给你一个const指针到底层字符串数据。

+0

这是我的问题所在。谢谢! – ScArcher2 2012-01-18 19:56:57

+0

@ ScArcher2你应该看看你的编译器是否有printf格式检查,这样你就可以避免这个错误。 – bames53 2012-01-18 20:05:49

+1

对WinHttpQueryHeaders的引用建议使用Visual C++。它不是。 – 2012-01-18 20:07:52

4

如果LPVOID指向wchar_t指针照你这么说,你的间接的水平是错误的。

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

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

+0

我相信我错过了我纠正了我的例子,因为我不知道我在说什么:) – ScArcher2 2012-01-18 19:44:14