• 締切済み

C言語

C言語で int i; char message[]=\"PROGRAM\"; for(i=0; i< message[i] !=\'\\0\'; i++){ putchar(\"message[i]\"); } で、繰返し条件の i<message[i]!=\"\\0\" は、 どういう意味なのか教えて下さい。

みんなの回答

回答No.5

ああっ。本題に行くのを忘れた。 「i< message[i] !='\0'」の意味ですが、これは「i< message[i]を評価し、評価した結果が'\0'と等しいかどうか?」を判定しています。 iは0から始まっているので、iが7になるまで(6以下の間)は「i< message[i]」は「0じゃない値」になります。 iが7になるとmessage[i]は0なので「i< message[i]」は「0」になります。 そして、それを'\0'(0と同じ)と比較して「一致しなかったら真、一致したら偽」にしています。 本当は for(i=0; message[i] !='\0'; i++){ と書くべきですが「message配列の中身が"PROGRAM"の場合、期待した動作と同じ動作をしてしまい、バグが表面化しない」ので、間違いに気付いてないのだと思います。

k0905974
質問者

お礼

ありがとうございます。i<message[i]は無視しても問題無さそうですね。

回答No.4

質問にあるソース「特殊文字の余計なエスケープ」が行われている感じ。 例えば「ホームページ上にアップロードする為に、わざと特殊文字を全部エスケープした」とか。 (だとしても、不要な場所に「"」があったりして、それでも変なんだけど) で、「特殊文字の余計なエスケープ」を全部取り除くと int i; char message[]="PROGRAM"; for(i=0; i< message[i] !='\0'; i++){ putchar(message[i]); } となる訳で、これなら意味が判ると思いますが…。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

よくみたら変ですね for(i=0; message[i] !='\0'; i++) ならわかるんですが

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

余分なエスケープ文字が混ざってるようですが int i; char message[]="PROGRAM"; for(i=0; i< message[i] !='\0'; i++){ putchar("message[i]"); } でしたら message[ 0 ] : 'P' message[ 1 ] : 'R' message[ 2 ] : 'O' message[ 3 ] : 'G' message[ 4 ] : 'R' message[ 5 ] : 'A' message[ 6 ] : 'M' message[ 7 ] : '\0' になります i が 0から6の間だけforループ内が実行されることになります。 文字列の最後に'\0'が自動的に入るのを知らないとわかりませんね

k0905974
質問者

補足

ありがとうございます。i<message[i]とは、どういう意味なのかな…?

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

\"\\0\"とは、文字列「"\0"」の事 エスケープ文字、エスケープシーケンスをキーワードにして検索すれば沢山ヒットするはず しかし・・・ i < message[i] != \"\\0\" なんて、まともなコードじゃない 例として書くにしても程がある

関連するQ&A