文字列を比較するプログラムについてなのですが、
”苦しんで覚えるC言語”に記載されていたソースコードで、
1つ疑問があります。
C
1 2#include <stdio.h> 3#include <string.h> 4 5 6int main(void) 7{ 8 char str1[256],str2[] = "DRAGONQUEST"; 9 int i,len; 10 11 scanf("%s",str1); 12 13 len = strlen(str2); 14 15 for (i = 0;i < len + 1;i++) { 16 if (str1[i] != str2[i]) break; 17 } 18 19 if (i == len + 1) { 20 printf("同じ\n",i); 21 } else { 22 printf("違う,\n",i); 23 } 24 25 return 0; 26}
このプログラミングで、
str1の入力がループ強制脱出のifに偽の時、ループの条件式(i = 0;i < len + 1;i++)によると、iは11でループが終了するということになるのと思うのですが、その後のif (i == len + 1)で真の結果がでることが理解できません。
私の考えではループはiが11になったときに終了するので、iは11でlen + 1(11字+EOSで12)と等しくないと思うのですが、これはなぜiが12になるのでしょうか。
追記
c
1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 char str1[256],str2[] = "DRAGONQEST"; 7 int i,len; 8 9 scanf("%s",str1); 10 11 len = strlen(str2); 12 13 printf("%d\n",len); 14 15 for (i = 0;i < len + 1;i++){ 16 printf("str1[%d] = %c ,str2[%d] = %c\n",i,str1[i],i,str2[i]); 17 if (str1[i] != str2[i]) break; 18 } 19 20 21 printf("i(%d) == len + 1(%d)\n",i,len + 1); 22 if (i == len + 1) { 23 printf("同じ,i = %d ",i); 24 } else { 25 printf("違う,i = %d ",i); 26 } 27 28 return 0; 29}
iが12になるのか確認してみようとこのプログラムをしてみたのですが、やはり理解できませんでした。
回答2件
あなたの回答
tips
プレビュー