我正在尝试创建一个数组,数组的大小取决于输入元素的数量。之后,我想打印它,但输出却很奇怪。
int main(void)
{
int input_arr;
int i,size=0;
int arr[size];
while(input_arr!=-1){
printf("enter positive int");
scanf("%d",&input_arr);
arr[size]=input_arr;
printf("%d",arr[size]);
for(i=0;arr[i]!='\0';i++){
printf("%d ",arr[i]);
}
size+=1;
}
return 0;
}
33 3 3 3 3 3 6487488 enter positive int3.
它给出这样的输出,并在一段时间后停止接收元素。我不知道我在哪里做错了。
答案 0 :(得分:2)
在C语言中,数组的大小在您定义数组时即已固定。增加size
变量不会增加数组大小。因此,当您读取第一个元素时,您会立即获得缓冲区溢出。您可以改为声明一个大型数组,如下所示:
static const int maxSize = 4096;
int arr[maxSize];
int main(void)
{
int i, size=0;
while(size < maxSize){
printf("enter positive int");
scanf("%d", &arr[size]);
++size;
for(i=0; i < size; i++){
printf("%d ",arr[i]);
}
printf("\n");
}
return 0;
}
或者,您可以使用malloc
和realloc
来动态扩展数组。