用户的数组大小

时间:2015-09-02 23:00:14

标签: c

我希望用户决定我的阵列的大小
我能做到吗? 我试过了:

#define max 8  
int a[max]; 

然而,用户无法改变常数 我试过了:

int i, a[i];  

但是它给出了一个错误 帮助

4 个答案:

答案 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