1

我用 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 并且当向数组中输入第二个数字时发生崩溃。

我不明白为什么它崩溃了,请给我解释一下。

4

1 回答 1

5

scanf接受一个指向存储值的位置的指针。即 的地址a[j]。所以scanf("%d", &(a[j]) );,或scanf("%d", a+j);(记住,a[j]等价于*(a+j))。

此外,还有其他各种问题。对于初学者来说,它应该是c还是c++?目前它也不是真的(尽管它更接近c)。如果有人输入大于 会发生什么20

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

于 2012-11-29T11:58:10.853 回答