3

次のプログラムの出力について誰か説明してもらえますか? 使用すると無限ループが発生し、使用a[i] = 0;するとsegfaultが発生し、使用するa[i] = i;とその間のi範囲が発生しますが0 - 9、使用するとsegfaultを発生させる前a[i] = 0;に39にa[i] = i;なります。

#include<stdio.h>
#include<stdlib.h>
int mult(int a, int b);
int main()
{
    int a[10];
    int i = 0;
    for(i=0; i < sizeof(a); i++)
    {
        a[i] = i;
        printf("a[i]=%d i=%d\n", a[i], i);
    }
    return 0;
}
4

4 に答える 4

5

おそらく、この行を変更したいと思うでしょう:

for(i=0;i<sizeof(a);i++)

これに:

for(i=0;i<sizeof(a)/sizeof(a[0]);i++)

ノート:

  • sizeof(a)のバイト数を与えるa[]

  • sizeof(a)/sizeof(a[0])の要素数を与えるa[]

于 2013-09-16T17:44:45.407 に答える
2

別の const に格納せずに、どこまでループするかを知りたい場合は、次を使用します。sizeof(a)/sizeof(a[0])

于 2013-09-16T17:46:31.890 に答える