2012-01-18 157 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