随机数组大小一开始?

时间:2013-05-02 17:59:49

标签: c arrays random

我希望每次程序执行时都会生成一个随机大小的数组,但编译器会让我大叫

"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;
    ...
}

4 个答案:

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