此问题在此处已有答案:
In C, why can we access an array element whose index is out of range?(3个答案)
17天前关闭.
#include<stdio.h>
int main(){
int n;
printf("Enter the number:");
scanf("%d",&n);
int array[n];
for (int i=0;i<=n;i++){
printf("%dEnter the number:",i);
scanf("%d",&array[i]);
}
for (int i=n;i>=0;i--){
printf("%d\n",array[i]);
}
}
其中大小被定义为给定的数字,但是当将值放入循环中时,大小会增加。期望数组只接受5个值,但它接受的值超过5个。
2条答案
按热度按时间wribegjk1#
1.第一个循环写入数组
array[n]
超出了边界(循环执行n+1次)。这是一个未定义的行为。它可能会覆盖无关的内存,通常会导致segfault。C中的数组索引为0,因此第一个元素是
array[0]
,最后一个元素是array[n-1]
。下面修改后的循环是C中的标准习惯用法;如果它是其他任何东西,经验丰富的C开发人员会格外小心地查看它。
1.第二个循环读取出边界
array[n]
(n+1)。这是未定义的行为。1.检查n>=1和合理的大小,否则程序可能会因耗尽堆栈空间而崩溃。
1.检查
scanf()
的返回值,否则您可能会对未初始化的变量进行操作,这是未定义的行为。1.为了可读性而修改你的代码(这很重要)。
字符串
示例会话:
型
gj3fmq9x2#
问题是
i
将等于0, 1, 2, 3, 4, 5
。只要数一下数字,就有6个。这就是为什么for循环的主体被执行了5次以上。如果你想让这个for循环执行
n
次,写for (int i = 0; i < n; i++) // ...
是很常见的。