【问题标题】:crash in filling an array填充数组时崩溃
【发布时间】:2012-11-29 11:55:41
【问题描述】:

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

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

【问题讨论】:

  • 澄清一下,这是纯 C 而不是 C++(除了在适当位置声明 j

标签: c arrays stdio


【解决方案1】:

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

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

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

【讨论】:

  • 我是c和c++的新手,在java中我们可以从用户那里给n并创建一个长度为n的数组,只有我知道c不能。
  • 如果这是c++,并且您想要一个类似数组的东西,但是您可以从用户输入中指定大小,或者随时扩展它,请查看std::vector
  • 非常感谢您的回答和 cmets。
猜你喜欢
  • 1970-01-01
  • 2011-07-17
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多