#include<stdio.h>
int main()
{
int N,A[N],i;
printf("Dizinin eleman sayisi : ");
scanf("%d", &N);
//int A[N];
for ( i = 0; i < N; i++)
{
printf("Dizinin elemani : ");
scanf("%d", &A[i]);
}
for ( i = 0; i < N; i++)
{
printf(" %d ",A[i]);
}
for ( i = 0; i < N; i++)
{
printf("\ndizinin %d. elemani : %d\n", i,A[i]);
}
return 0;
}
字符串
我得到这个错误时,我想保存数组A的开始作为N维。这不是一个大问题,但我很好奇,因为我是新的编程,提前感谢你。
2条答案
按热度按时间e0bqpujr1#
在定义
int A[N]
时,变量N
未初始化。这是未定义的行为。由于A
的访问越界,程序可能会发生segfault,这也是未定义的行为。大小小于零的数组是未定义的行为,但某些编译器支持将大小为零的数组作为扩展。以后更新数组int A[N]
时,不会调整数组的大小N
的值。“请务必检查
scanf()
的传回值,否则您可能会在未初始化的变数上执行作业。首选最小化变量范围(
i
)。字符串
和示例输出:
型
mrphzbgm2#
除了@Allan Wind的回答,
在C语言中,数组声明需要一个“预定义”的值。这是因为它们不是在执行代码的那一行时创建的,而是在函数的作用域创建时声明的。
这意味着当你编码时
字符串
变量'size'和'x 0'将在程序启动时声明。'size'将包含garbage value,'x 0'的大小将在每次执行中变化。
不要这样做。
虽然这样的东西是可以接受的,但我仍然不建议使用可变大小的数组声明:
型
请注意,'unsigned'关键字防止了segfault -因为我们不能有一个负的大小-它没有修复坏的做法/实现。