- ベストアンサー
cprintf()関数で2バイト文字を表示するには
cprintf()関数の引数に2バイト文字を含む文字列を指定してプログラムを 実行すると、表示結果の2バイト文字の部分が全て文字化けしてしまいます。 cprintf()関数で2バイト文字を表示することはできないのでしょうか? ご教示宜しくお願い致します。 下記は実際に文字化けしてしまうコードです。 ---------------------- #include <conio.h> int main(void) { cprintf("日本語 English"); return 0; } ---------------------- 【環境情報】 使用コンパイラ:VC++2008 実行環境:WinXPSP2とVistaHomePremiumSP1の2環境で確認 【質問の背景】 『独習C 第3版』という本の中に、一部のコンパイラでは、getche()の ような非標準の入出力関数とprintf()などの標準の入出力関数を併用 すると問題が発生すると記載されており、printf()関数の代わりに cprintf()関数を使用したサンプルコード(上記のコードとは異なる)も記載されています。 しかし、実際にそれをコンパイルして実行してみると、2バイト文字が 全て文字化けして表示されてしまいました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
WinXPSP2 VC++6.0では正しく表示されます。 VC++2008では、 _cwprintf(L"日本語 English"); としないとダメみたいです。
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
えー、まず、 http://msdn.microsoft.com/ja-jp/library/ms235371.aspx cprintf()は使うなと書いてあります。 あとはデフォルトではプロジェクトの文字コードがUnicodeになってるはずなので_cprintf()ではなくて_cwprintf()を使わないと駄目な気がします。 プロジェクトの文字コードをマルチバイトに変更すれば、おそらく_cprintf()でいけるのではないかと。
お礼
ご回答ありがとうございます。 setlocale()関数を使ったところうまくいきました。 ----------------------------- #include <conio.h> #include <locale.h> int main(void) { setlocale(LC_CTYPE, "jpn"); _cprintf("日本語 English"); return 0; } -----------------------------
お礼
ご回答ありがとうございます。 VC++6.0ではうまく動くのですね。 『独習C 第3版』の第1刷発行日は2002年9月18日となっているので、 その時点では問題ないコードだったんだとおかげで納得できました。