pc3

C言語初心者学習記 part3

unknown escape sequence: ‘\x82’が出た

ダラダラ進めておりますこのシリーズ。

今回はprintf関数で文字を出力すると現れたこのエラーと格闘をしたお話です。

余計なことを色々書いてると…

着々と進めて条件分岐の項でオリンピックの開催年を判別するプログラムを練習で組みました。

プログラムの構成自体に問題はないのですが、エラーが返ってきて動かない事態になりました。

 

おそらく、「ただ普通にやるのも」と思ってやたらとうるさい感じにしたのが災いしましたw

 

その時書いた問題のプログラムがこちらです。

なんか変な奴が現れるのは仕様です。

if関数のみで条件分岐させているので色々スマートではないですが…。


 

#include<stdio.h>

int main(void)
{
int year,a;
printf(“やあ!僕はオリンピック野郎!\n知りたい西暦を入力すれば、その年にオリンピックがあるかどうかを半ばいい加減に教えてあげるよ!\n:”);
scanf(“%d”,&year);

a=year%4;
/*条件分岐*/
if(a==0)printf(“今年の夏はオリンピック野郎が騒ぎまくれる年だぜ~\n”);
if(a==2)printf(“今年の冬はオリンピック野郎が暴れまくるぜ~\n”);
if(a==1||a==3)printf(“今年はオリンピック野郎の出番がないようだ…\nそんな年…許せない!\n”);

printf(“どうかな?タメになったかな☆?\n”);
return 0;
}


 

 

…内容はさておき、問題はこのプログラムが返すエラーですね。

if(a==2)printf(“今年の冬はオリンピック野郎が暴れまくるぜ~\n”);

この一文が問題だったのです。

 

実は…

このプログラムの先の一文の記述を変えると正常に作動するのです。

 

「暴」→「あば(れる)」

 

とするだけで直ったのです。

しかし、それでは結局、このunknown escape sequence: ‘\x82’のエラーが何者なのかわかりませんね。

そこで、なぜこうなるのかを調べました。

 

なぜunknown escape sequence: ‘\x82’が出たのか

調べたところ、根本的な原因は自分が使っているPCの文字コードと、コンパイラが参照している文字コードの違いによって起きているようです。

文字の一つ一つは違う値で区別されて扱われています。

その文字と値の対応表が同じ日本語に対応したものでも何種類か存在します。

そしてその中身が若干違うため、お互いに別のものを参照しているとすれ違ってしまうんですね。

 

私のPCからはShift_JISというもので記述しました。

暴は”96 5c”と変換されます。

この後ろの5cが曲者でエスケープシークエンスとして処理されてしまいます。

 

すると、「暴」の後ろの”5c”が無いものとして処理されてしまいます。

 

これによって誤認されてしまいエラーを返されてしまったようです。

当然平仮名にすると扱うコードが変わるのでエラーが出なくなったというわけですね。

 

対応策

使わないのも手ですが、エスケープシークエンスをはさむことでも解決できるようです。

if(a==2)printf(“今年の冬はオリンピック野郎が暴\れまくるぜ~\n”);

この文に差し替えると「暴」の字を崩さずに表示できました。

 

まとめ

unknown escape sequence: ‘\x82’のエラーが出た時は、文字コードに気を付ける必要があるようですね。

”5c”を含む文字がそのまま記述されている可能性があります。

調べたところによると、よく使いそうな

「能」「表」「予」「構」「十」「貼」「ソ」「免」「申」「筆」「噂」

等がそれにあたるようです。(他にもまだあります)

 


【前→C言語初心者学習記 part2

【後→C言語初心者学習記 part4


 

0

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA