这个简单的代码:
int main()
{
srand(time(NULL));
const int size = rand() % RAND_MAX;
int numbers[size];
int i;
for (i = 0; i < size; i++)
numbers[i] = rand() % RAND_MAX;
for (i = 0; i < size; i++)
printf("numbers[%d]=%d\n", i, numbers[i]);
}
无法编译,因为数组的大小不是const
值。
为什么会这样?
我该如何解决?
答案 0 :(得分:2)
使用ANSI C89
和C90
标准,您必须在编译时提前知道数组的大小。仅在C99
中才允许使用可变大小的数组。
您可以使用c99
编译器编译它,也可以在堆上分配内存:
int *numbers = malloc(size * sizeof(int));
答案 1 :(得分:0)
在较旧的编译器上,禁止使用变量(即不是常量)定义数组的长度。
请改用malloc()
功能:
#include <stdlib.h>
...
const int size = rand() % RAND_MAX;
int *numbers = malloc(sizeof(*numbers)*size);