我正在处理的程序要求用户输入一个整数值,然后根据该值打印一个零的数组。我已经能够在预设数组大小时执行此操作,但是当尝试在用户输入上执行此操作时,我会遇到编译器错误。我已经尝试过研究修复但是我没有发现任何事情,因为大多数修复使用dynamic memory allocation
我们还没有教过如何使用。这是我到目前为止提出的代码。
在我试图找出错误的原因时,我发现如果我不使用0
初始化数组,则数组将打印到用户输入的大小,当然数组输出数字是完全随机的。
当我初始化数组的大小时,我得到错误variable-sized object may not be initialized
,并在j
的方括号内指向int j, ar[j]={20};
的小箭头。
还有其他方法没有使用dynamic memory allocation
吗?
#include <stdio.h>
int main(void){
int i;
int j, ar[j]={0};
printf("Please enter the value:");
scanf("%d",&j);
for(i=0; i<j;i++){
printf("%i\n",ar[j]);
}
答案 0 :(得分:0)
int j, ar[j]={0}; // you should not do this
这不正确,因为j
未正式化。
但这将在C99中得到支持 -
int j;
printf("Please enter the value:");
scanf("%d",&j); // take input in j
int ar[j]; // this statement int ar[j]={0} will give compilation error
for(i=0;i<j;i++){
ar[i]=0;
printf("%d",ar[i]);
}
答案 1 :(得分:-1)
我认为没有任何方法可以使用动态内存分配。
我建议您使用malloc
或calloc
代替C. calloc
在分配后清除内存。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i;
int j, *ar;
printf("Please enter the value:");
scanf("%d",&j);
ar = calloc(j, sizeof(int));
if (ar == NULL) return 1;
for(i=0; i<j;i++){
printf("%i\n",ar[j]);
}
free(ar);
return 0;
}
使用new[]
对C ++有用。
#include <stdio.h>
int main(void){
int i;
int j, *ar;
printf("Please enter the value:");
scanf("%d",&j);
ar = new int[j];
for(i=0; i<j;i++){
printf("%i\n",ar[j]);
}
delete[] ar;
return 0;
}