我希望每次程序执行时都会生成一个随机大小的数组,但编译器会让我大叫
"Error 2 error C2466: cannot allocate an array of constant size 0"
有什么方法可以在开头随机选择SIZE
SIZE = rand() % 100
,然后用int myarray[SIZE]={0}
初始化数组???或者我应该每次都用一个确切的数字初始化它?
int main(void) {
int i;
int SIZE=rand()%100;
int array2[SIZE]={0};
for(i=0;i<SIZE;i++) //fill the array with random numbers
array2[i]=rand()%100;
...
}
答案 0 :(得分:2)
你表示你正在使用微软的视觉工作室。 MS visual studio not c99 compilant(他们最好选择),其中一个缺失的功能是VLAs。
MS VS能够做到的最好是使用malloc()
动态执行此操作:
int main(int argc, char *argv[])
{
int i;
int SIZE=rand()%100;
int *array2=malloc(SIZE * sizeof(int)); // allocate space for SIZE ints
for(i=0;i<SIZE;i++) //fill the array with random numbers
array2[i]=rand()%100;
free(array2); // free that memory when you're done.
return 0;
}
如果要切换编译器,还有其他选项。
答案 1 :(得分:1)
请注意,rand()%100
可以且将为0.如果您想要随机值1&lt; = n&lt; = 100,那么您需要使用(rand()%100)+1
答案 2 :(得分:1)
您可以使用malloc()
或calloc()
在C中执行此操作。例如,
int SIZE=(rand()%100)+1; // size can be in the range [1 to 100]
int *array2 = (int*) malloc(sizeof(int)*SIZE);
但同时,数组大小不能是常量值。
以下两个声明有效。
int a[10];
和
#define MAX 10
int b[MAX];
但如果您尝试使用以下方法声明,则会出现错误。
int x=10;
int a[x];
和
const int y=10;
int b[y];
答案 3 :(得分:1)
执行此操作的最佳方法是使数组成为指针并使用malloc:
int SIZE=(rand()%100) + 1; //range 1 - 100
int *array2 = malloc(sizeof(int) * SIZE);
之后,您可以像使用数组一样使用array2
。