2009-04-04 16 views
2

ファイルにLPCWSTR値を印刷しようとしていますが、値ではなくアドレスだけが出力されます。C++ LPCWSTRをファイルに出力する

値を取得するために変数を逆参照しようとしましたが(*を使用して)、これも機能しません。

どのように値を印刷できますか?

void dump(LPCWSTR text){ 

    ofstream myfile("C:\\myfile.txt", ios::app); 
    myfile << text << endl; 
    myfile.close(); 

} 

ありがとうございます。

答えて

2

wofstream(basic_ofstream)を使用してください。この理由は、wバージョンのstdストリームがワイド文字列とデータで動作するように設計されているためです。あなたが使っている狭いバージョンは、おそらくいくつかの埋め込まれたヌルを含んでいるワイド文字列を見るでしょう、そして、それが文字列の終わりだと思うでしょう。

+0

"narrow"バージョンが機能しない理由は、演算子<<(ostream、wchar_t *)がないためです。 –

1

wofstreamは、(BOMのない)ユニコードの出力も生成します。ブライアンが望むものではないかもしれない。

残念ながら、ファイルを8ビット文字にしたい場合は、C++文字列から抜け出し、ユニコード文字列を8ビット文字に変換します。

wcstombsを使用すると、文字列を8ビット文字に変換できます。変換は現在のロケールで行われるため、変換が正しいロケールで行われるように、必ずsetlocaleを使用してください。残念ながら、setlocaleのドキュメントは、UTF-8に変換できないことを示しています。(

+0

"出力"とは、 "ファイルに書き込まれるもの"を意味すると仮定します:wofstreamがUnicode出力を生成すると言っても間違いですそれが出力するのは、filebufの埋め込まれたロケール(より正確にはcodecvtファセット)に依存します。 –

+0

"8ビット文字"を得るために外部変換が必要であると言うのは間違いです。 wchar_tsではなく、ファイルにバイトを書き込みます。filebufは、ロケールのcodecvtファセットを使用してwchar_t-> char変換を実行します。 –

関連する問題