0

我正在学习数组,只是写了这个小程序来看看它是如何工作的。但它因分段错误而崩溃,我理解这意味着我正在将我的变量/函数写入未分配给它的内存位置。但我不知道怎么做。任何人都可以让我知道吗?我正在从我的 main() 调用 introArray。

int introArray (void)
{
    int total, ctr;

    printf("enter how many students \n");
    scanf("%d", &total);

    int students[total];
    ctr = 0;

    while ( students[ctr] <= total)
    {
        printf("enter student %d DOB in mmddyy \n", ctr );
        scanf("%d", students[ctr]);
        ctr++;
    }

    return 0;

}

4

4 回答 4

2

在您的代码中,存在一个实现逻辑问题。学生总数是total,因此,您的while循环应该是

while(ctr < total)

要读取的数据也应该scanf("%d", &students[ctr]);缺少符号

于 2013-03-19T22:50:38.827 回答
0

ctr超越total。这样你就会越界 将循环更改为

while (ctr < total)
{
        printf("enter student %d DOB in mmddyy \n", ctr );
        scanf("%d", &(students[ctr]));
        ctr++;
}
于 2013-03-19T22:49:57.630 回答
0

这条线

while ( students[ctr] <= total)

不能防止读取循环内的数组边界。ctr如果您用作索引,这将阻止您阅读数组末尾

while ( ctr < total)

您需要严格的不等式,因为数组索引是从零开始的。

此外,您scanf在循环中的调用while是错误的 - 第二个参数应该是一个指针,当前您传递一个整数。它应该是

scanf("%d", &students[ctr]);
于 2013-03-19T22:50:24.510 回答
0

我认为

scanf("%d", students[ctr]);

应该

scanf("%d", &students[ctr]);
于 2013-03-19T22:50:36.087 回答