- ベストアンサー
for
下記コードは私が昔作成したコードなのですが分からなくなってしまった部分があるので教えてください。 #include<stdio.h> void main(void){ int i; char fst[100],snd[100]; printf("文字列1:"); gets(fst); printf("文字列2:"); gets(snd); for(i=0;fst[i];i++){ if(fst[i] != snd[i]){ i++; printf("%d文字目が不一致です。\n",i); break; }else{ } } i--; if(fst[i]==snd[i]){ printf("一致しています。\n"); } } for(i=0;fst[i];i++){ の fst[i] の部分が分かりません。 これは一体どういう条件なのでしょうか? i<5等なら分かるのですが・・・ よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
じゃあ、 if(fst[i]) {} なら分かるかな? if(expression) {} って、expressionが「0でない場合、真」になるよね。 で、fst[i]は、iをどんどん増やしていくと、「文字列の最後」でこれがfalseになる。abcという文字が入っているとすると、fst[0]='a', fst[1]='b', fst[2]='c', fst[3]='\0'になるのは分かるかな。ところで、「'\0'」というのは「(char)0」と似た意味で、値としては0となる。 なので、 for(i=0;fst[i];i++) と言うのは for(i=0;fst[i]!='\0';i++) と同義で、fst[i]が(C言語で文字列の最後を表す)0で無い限り続けるという意味やね。
その他の回答 (1)
- FAY
- ベストアンサー率49% (95/193)
for文の構文は for( [init-expr]; [cond-expr]; [loop-expr] ) で、2番目の[cond-expr]を評価した結果が偽(0)でない場合は ループ内の処理を実行し、[cond-expr]を評価した結果が偽の場合は ループを抜けて次のステートメントを実行します。 なので for(i=0;fst[i];i++) というのはfst[i]が0になるまで (上のプログラムの場合文字列の終端まで) ループ内の処理を実行するということですね。 #個人的にはこう書いてほしくないですが。
お礼
>#個人的にはこう書いてほしくないですが。 確かに。自分でも分からなかった・・・ ありがとうございます。
お礼
めっさ理解できました。 ありがとうございます。