C言語関係掲示板

過去ログ

No.1152 cygwinで「表示」が文字化け

[戻る] [ホームページ]
No.14691

まったく不可解なコンパイルエラー
投稿者---new(2004/06/17 13:57:53)


printf関数で"表"という漢字を出力させようとすると、
『warning: unknown escape sequence: `\' followed by char code 0x8e』
というエラーがでます。なぜでしょう?コンパイラーが悪いのでしょうか?
ちなみに私が使用しているコンパイラーはcygwin version 2.78.2.3
です。

強引に実行すると次のようの文字がでます。
<結果> 侮ヲ


#include <stdio.h>

int main(void){
    
    printf("表示\n");
    
    return 0;
}


皆様方、お忙しいとは思いますがなにとぞご教授ください。
宜しくお願いいたします。



No.14692

Re:まったく不可解なコンパイルエラー
投稿者---だん(2004/06/17 14:07:03)


cygwinは使用したことがないのでわかりませんが、
wprintf関数を使用するべきではないでしょうか?



No.14696

Re:まったく不可解なコンパイルエラー
投稿者---new(2004/06/17 14:53:06)


>wprintf関数を使用するべきではないでしょうか?

すいません、だん殿。私の勉強不足によりワイド文字の使用方法が
わかりません。以下のように書いてみましたが、やっぱりコンパイルがとおりません。よろしければ、ご教授お願いします。

#include <stdio.h>
#include <wchar.h>

int main(void){
    wchar_t str[128] = "表示";
    
    wprintf(str);
    
    return 0;
}



No.14693

Re:まったく不可解なコンパイルエラー
投稿者---円零(2004/06/17 14:44:56)


これは結構有名な問題かも。私もどっかで聞いたことがあるような気がします。
で、検索したら、こんなん出ました。
http://www.kent-web.com/pubc/jcode/
http://homepage2.nifty.com/k_maeda/code/perl.html


とりあえず"表\示"ではどうですか。



No.14697

ありがとうございました
投稿者---new(2004/06/17 15:04:07)


なるほど、PCやコンパイラの問題ではなく、コード表の問題だったわけですね。C5には注意が必要ですね。
本当に皆様の知識には脱帽します。謎が解けてすっきりいたしました。
ありがとうございます。





No.14694

Re:まったく不可解なコンパイルエラー
投稿者---ぽこ(2004/06/17 14:45:45)


>printf関数で"表"という漢字を出力させようとすると、
>『warning: unknown escape sequence: `\' followed by char code 0x8e』

>強引に実行すると次のようの文字がでます。
><結果> 侮ヲ

Shift-jis環境にて、表(0x955C)示(0x8EA6)
ASCIIでは0x5Cは'\'となるので
"表示"={0x95, '\', 0x8e, 0xA6}
"\0x8e"といったエスケープ系列はないので、コンパイラは警告を出し、
プログラム実行時には'\'を無視し、以下のように表示してるのでは?
"侮ヲ(半角)"={0x95, 0x8e, 0xA6};





No.14695

Re:まったく不可解なコンパイルエラー
投稿者---tetrapod(2004/06/17 14:45:59)


cygwin 版 gcc は、ソースコードにおいて日本語(マルチバイト文字)対応していません。
さらに、表の sjis 表現は、その2バイト目に 0x5C つまりバックスラッシュ文字を含みます。
そのため、文字列中のバックスラッシュ文字を見て \n や \t と同様の処理を行おうとし、
未知のエスケープシーケンスがある、という警告になってしまいます。

とりあえず "表\示" とすれば直るのですが...
EUC コードでソース書くとか
sjis の2バイト目の \ をフィルタするソフトを使うとか
その辺の対処が必要でしょう。