アプリ版:「スタンプのみでお礼する」機能のリリースについて

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バイト文字が
全て文字化けして表示されてしまいました。

A 回答 (2件)

WinXPSP2


VC++6.0では正しく表示されます。
VC++2008では、
_cwprintf(L"日本語 English");
としないとダメみたいです。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
VC++6.0ではうまく動くのですね。
『独習C 第3版』の第1刷発行日は2002年9月18日となっているので、
その時点では問題ないコードだったんだとおかげで納得できました。

お礼日時:2009/05/26 20:33

えー、まず、


http://msdn.microsoft.com/ja-jp/library/ms235371 …
cprintf()は使うなと書いてあります。

あとはデフォルトではプロジェクトの文字コードがUnicodeになってるはずなので_cprintf()ではなくて_cwprintf()を使わないと駄目な気がします。

プロジェクトの文字コードをマルチバイトに変更すれば、おそらく_cprintf()でいけるのではないかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
setlocale()関数を使ったところうまくいきました。
-----------------------------
#include <conio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_CTYPE, "jpn");
_cprintf("日本語 English");
return 0;
}
-----------------------------

お礼日時:2009/05/26 20:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!