问题描述
如果我要给出10个元素,则将how_many
扫描为10。
但是,一旦我输入第三个值,程序就会崩溃并返回一些长负值。我不知道问题出在哪里。
int main()
{
int how_many,k;
int data[how_many];
printf("Enter the number of values to be sorted..: ");
scanf("%d",&how_many);
printf("Enter the values one by one..:\n");
for (k=0;k<how_many;k++)
{
scanf("%d",&data[k]);
printf("data[%d]=%d\n",k,data[k]);
}
return 0;
}
解决方法
定义int data[how_many]
时,变量how_many
仍未初始化。
仅在之后定义arrey,即可从用户那里获得该值,但前提是scanf成功且该值为正。
int how_many,k;
printf("Enter the number of values to be sorted..: ");
if ( scanf("%d",&how_many) && how_many > 0 )
{
int data[how_many];
/* ... */
}
但是VLA(可变长度数组)有点危险:如果用户插入2000000000怎么办?您还必须检查一个合理的最大值:
#define MAX 1000
/* ... */
if ( scanf("%d",&how_many) && how_many > 0 && how_many <= MAX )
{
int data[how_many];
/* ... */
}
这就是为什么自C11起已从标准中删除VLA的原因,在这种情况下它不是最佳选择。我建议只是静态定义数组
int data [MAX];
或动态:
int *data = malloc ( MAX * sizeof( int ) );