RAND_MAX有问题

时间:2015-03-17 14:45:16

标签: c random

这个简单的代码:

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值。

为什么会这样?

我该如何解决?

2 个答案:

答案 0 :(得分:2)

使用ANSI C89C90标准,您必须在编译时提前知道数组的大小。仅在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);