質問: int main(){ char *name[7]={"Iizumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"}; char **p; int i, j; p=name; for(i=0; i<7; i++){ for(j=0; *((*p+i)+j)!='\0'; j++); printf("%2d:%s\n", j, *(p+i)); } return 0; } 上記のコードは「"Iizumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示しなさい」という問題の解答例です。 「 for(j=0; *((*p+i)+j)!='\0'; j++);」の部分について質問があります。 for文は最後に「{}」をつけるという認識を持っていたのですが、なぜこのコードでは「;」をつけているのでしょうか? また、このコードがどのような動作をしているのか教えてください。
回答: > > for文は最後に「{}」をつけるという認識を持っていたのですが、なぜこのコードでは「;」をつけているのでしょうか? > > > `for`のあとは**文**であれば何でも構いません。 * `{ ... }`でくくった複文 * 一文だけならそのまま書いてもOK * さらに、`for`のカッコ内ですべての用事が片付くなら、セミコロンだけ(空文)でもOK このコードでは、`j`のインデックスをヌル文字まで進めています。 もっとも、このようなコードは自前で書かず、`strlen`を使ったほうがいいでしょう。