我希望用户决定我的阵列的大小
我能做到吗?
我试过了:
#define max 8
int a[max];
然而,用户无法改变常数 我试过了:
int i, a[i];
但是它给出了一个错误 帮助
答案 0 :(得分:5)
假设您的编译器支持C99和variable-length arrays,那么以下代码将起作用:
int size;
fputs("Array size? ", stdout);
scanf("%d", &size);
int array[size];
如果您的编译器没有,则必须使用malloc
。
int size;
int* array;
fputs("Array size? ", stdout);
scanf("%d", &size);
array = malloc(size * sizeof(*array));
/* do stuff with array */
free(array); /* don't forget to free() when finished */
某些实现支持alloca
,它在堆栈上像可变长度数组那样分配,但这是非标准的。
答案 1 :(得分:4)
您需要在之后定义数组,并要求用户输入。
int size;
printf("Please enter the size of the array");
scanf(" %d", &size);
int array[size];
答案 2 :(得分:2)
对于干净的解决方案,请使用malloc()函数,而不是int array[size];
int size;
printf("What's the array size?\n");
scanf("%d", &size);
array=(int *) malloc(size*sizeof(int));
答案 3 :(得分:2)
如上所述,malloc是最好的方式,因为它不依赖于编译器。另外,因为当您发现需要增加减少数组的大小时,可以完成realloc。
int size;
printf("What's the array size?\n");
scanf("%d", &size);
array = (int *)malloc(size * sizeof(*array));
.
.
.
.some stuff on array
array = (int *)realloc(array, 1024); // changing size of array according to user.
有关realloc的更多详细信息,请访问resizing buffer using realloc