1

以下のコードを参照してください。

#include<stdio.h>
#include<stdlib.h>

int main()
{
 char a[1000];
 int i;
 for(i = 1;i<1000;i++)
 {
  a[i] = 5;
 }

 printf("%d\n",strlen(a));

 return 0;
}

結果は 0 です。なぜですか? 任意の説明をいただければ幸いです。

4

3 に答える 3

15

を割り当てたり初期化したりすることはありませんa[0]。この場合、たまたま だったので'\0'strlen(a)0 を返します。

null ターミネータを見つけるための検索の最初のステップとして、初期化されていないガベージ メモリを間接的に読み取ろうとしているため、ここでの呼び出しは未定義の動作でstrlenあることに注意してください。それを明示的に 0 に設定しても、0 が見つかるか、クラッシュするか、爆発するまで、配列の最後から実行されるという問題が発生します。aa[0]

于 2012-10-05T04:43:08.330 に答える
1

strlen()は、1ではなく0からカウントを開始します。これを行うと、次のようになります。

for(i = 0; i <1000; i ++)

于 2012-10-05T04:59:00.910 に答える
-1
 #include<stdio.h>
 #include<stdlib.h>
 int main()
 {
     char a[1000];
     int i;
     for(i = 0;i<1000;i++)//starts with 0 not 1
       a[i] = 5;
     a[i] = '\0';//NULL terminator shall be there 
     printf("%d\n",strlen(a));//1000

     return 0;
 }
于 2012-12-24T19:06:01.900 に答える