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バイト文字が
全て文字化けして表示されてしまいました。
No.2ベストアンサー
- 回答日時:
WinXPSP2
VC++6.0では正しく表示されます。
VC++2008では、
_cwprintf(L"日本語 English");
としないとダメみたいです。
ご回答ありがとうございます。
VC++6.0ではうまく動くのですね。
『独習C 第3版』の第1刷発行日は2002年9月18日となっているので、
その時点では問題ないコードだったんだとおかげで納得できました。
No.1
- 回答日時:
えー、まず、
http://msdn.microsoft.com/ja-jp/library/ms235371 …
cprintf()は使うなと書いてあります。
あとはデフォルトではプロジェクトの文字コードがUnicodeになってるはずなので_cprintf()ではなくて_cwprintf()を使わないと駄目な気がします。
プロジェクトの文字コードをマルチバイトに変更すれば、おそらく_cprintf()でいけるのではないかと。
ご回答ありがとうございます。
setlocale()関数を使ったところうまくいきました。
-----------------------------
#include <conio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_CTYPE, "jpn");
_cprintf("日本語 English");
return 0;
}
-----------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
Javaで日本語1文字のバイト数
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
3バイト文字(UTF-8)をprintfで...
-
日付時刻を4バイトに
-
【VB2005】テキストボックス内...
-
「1TB」のHDDに日本語は何字入...
-
windowsのファイルパス最大文字数
-
2バイト文字の判定はString#get...
-
VBAでUnicodeしか存在しない文...
-
この関数はどのプログラミング...
-
ビットスワップとバイトスワッ...
-
memcmp バイナリデータの比較方法
-
0.5バイトづつ読み込みたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイナリとBCDコード
-
「1TB」のHDDに日本語は何字入...
-
Javaで日本語1文字のバイト数
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
ピクセル,dpiから容量(バイト...
-
C++ Builderで文字列をバイトに...
-
64bit対応
-
ワイド文字のバイト数が取得で...
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
VBAでShift-JISのURLエンコード
-
機種依存文字をチェックしたい。
-
ビットスワップとバイトスワッ...
-
VBSでテキストファイルの文字列...
おすすめ情報