2012-01-18 240 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'にはそのためのコンストラクタがあります。何を手に入れますか?また、バッファはヌル終了していますか? –

+0

ポインタを初期化するために何が起きているのかでコードを更新しました。私はC++を初めて使っているので、ポインタなどの頭の中で私の頭を包んでいます。私はwchar_tがnullで終了しているかどうかわかりません。私はWinHttpQueryHeaders Funtionを呼び出しています - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384102(v=vs.85).aspxバッファが終端しているかどうかわかりませんでした。 – ScArcher2

+1

@ ScArcher2:「それはかなり機能していません」とはどういう意味ですか? –

答えて

3

wstringオブジェクトをprintfに渡すことは動作しません。あなたの基本となる文字列データへconstポインタを与える()

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

c_strように、第2 prinfラインを修正してください。

+0

これは私の問題があったところです。ありがとうございました! – ScArcher2

+0

@ ScArcher2このエラーを回避できるように、コンパイラにprintf形式のチェックがあるかどうかを確認する必要があります。 – bames53

+1

WinHttpQueryHeadersへの参照は、Visual C++を推奨します。それはしません。 –

4

wchar_tポインタLPVOIDポイントもしあなたが言うように、間接のレベルが間違っています。

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

編集:質問が変更されました。この回答はもはや適用されません。

+0

私は私が私の話題を知っていないので、私は私の例を修正したことを間違って信じていると思う:) – ScArcher2

関連する問題