在填充数组时崩溃

时间:2012-11-29 11:55:42

标签: c arrays stdio

我用C编写了一个简单的程序:

#include <stdio.h>

main(){
    int a[20], b[20];
    int n, i;
    printf("Enter a number: ");
    scanf("%d", &n);
    for(int j=0; j<n; j++){
        printf("Enter a number for a[%d]: ", j);
        scanf("%d", a[j]);
        printf("\n");
    }
}

此代码编译但在n大于2时运行,并且在向阵列输入第二个数字时发生了崩溃。

我并不感到沮丧,为什么它会崩溃,请向我解释。

1 个答案:

答案 0 :(得分:5)

scanf指针带到存储值的位置。即a[j]的地址。所以scanf("%d", &(a[j]) );scanf("%d", a+j);(请注意,a[j]相当于*(a+j))。

此外,还有其他各种问题。首先,它应该是c还是c++?目前它实际上并非如此(尽管它更接近c)。如果有人进入大于20的话,会发生什么?

如果你想知道造成崩溃的原因是什么,它会将a[j](这只是一些未初始化的垃圾)中的任何值解释为地址,然后尝试写入该(完全无效的)地址。它不喜欢这样,操作系统会杀死你的程序。这称为segmentation fault