ここから本文です

warning 31について

プロフィール画像

カテゴリマスター

max********さん

2012/11/1523:12:41

warning 31について

以下、ほか色々とお世話になっております。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1496930989...

過去のご回答例なども参考にさせていただいておりますが、
とても理解しやすいご回答をされており、とても役に立っております。

さて、今回の質問ですが、前回に引き続き、構造体内の文字配列をfprintfで出力する際に、
「warning 31 : String literal contains undefined escape sequence」
が"一部"出てしまい、どうしたものかと悩んでおります。

具体的には、構造体の中に構造体があり、中の構造体の中身はchar配列がびっしりあります。
その配列数は最小1から最大10まで様々なのですが、その数200~300ほどあるにも関わらず、
そのうちの数か所のみ、上記ワーニングが出てしまいます。

あくまでデバッグログとしてfprintfしているので、今の所処理には影響ないのですが、
やはりワーニングが消えないだけにとても気になっています。

ワーニングの行をコメントアウトすると、ワーニングはなくなるのでその行に問題があるのだと思いますし、
先の質問のご回答のようにchar xxx[1]には\0が入っていないため、\0まで出力するfprintf(fp,"%s",xxx);
に問題あるのかと思い、for(i=0;i<sizeof(xxx);i+++) fprintf(fp,"%c",&xxx[i]);としてみてもワーニングは
出てしまいました。

また、配列要素数1のところのみ出ているかと思えばそうではなく、要素数1のところでもでていないところも
ありますし、1でないところでも出ているため、(ただし、最上行のワーニングの出ている行は1)
どうしたものかと困っております。

閲覧数:
233
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

iss********さん

2012/11/1609:17:02

エスケープシーケンスというのは、ESC文字(0x5c)とそれに続く文字で解釈される特殊文字コードです。
ESCの後に続く文字は10種類程度しかないので、これ以外のものが来るとワーニングになります。
ソース上では\(Windows日本語版)またはバックスラッシュで表されます。(\n、\0など) 10種類くらいあります。
だから、\nと書くべきところを\mなどとタイプミスするとこのワーニングになるでしょう。(何をワーニングにするかの標準は無いので、コンパイラによります)
また、文字列が日本語でShift-JISコードの場合、コード2バイト目に0x5cが使われている漢字がいくつかあり、Shift-JISを考慮していないコンパイラではこの0x5cもエスケープ文字と解釈してしまうので後に続く文字と一緒に解釈してしまい、つじつまが合わなくなるのでワーニングを出します。

質問した人からのコメント

2012/11/16 09:43:04

成功 納得しました。

ベストアンサー以外の回答

1〜1件/1件中

きてらいさん

2012/11/1606:19:36

エラーの文を翻訳してみたところ、
「文字列リテラルの中に未定義のエスケープシーケンスがある」
らしいです。

警告が出ている行だけ補足で貼っていただけませんか?
注意深く見れば分かりそうな気がするのですが…

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる