在填充数组时崩溃

Ehs*_*san 1 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

BoB*_*ish 5

scanf获取指向存储值的位置的指针.即地址a[j].所以scanf("%d", &(a[j]) );,或scanf("%d", a+j);(记住,a[j]相当于*(a+j)).

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

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