让用户在C中选择数组的大小

时间:2014-11-27 18:11:03

标签: c arrays

我需要让用户输入一个整数N,它将成为数组的大小。我厌倦了以下事情:

int N;

printf("Please enter size of array\n");
scanf("%d", &N);

int a[N] = {0};

但是,当我这样做时,我收到以下错误:

error: variable-sized object may not be initialized

任何人都知道如何做到这一点?任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

您需要使用动态分配的数组。

int N;

printf("Please enter size of array\n");
scanf("%d", &N);

int *a = malloc(N * sizeof(int));

然后你可以像普通数组一样访问它。

编辑:在C99中编译器允许动态长度数组,因此你可以只使用memset或者通过数组执行for循环并为每个索引设置值

答案 1 :(得分:1)

您可能无法初始化可变长度数组。

从C标准(6.7.9初始化)

  

3要初始化的实体的类型应为数组   未知大小或完整对象类型不是可变长度   数组类型

所以简单地写一下

int a[N];

而不是

int a[N] = {0};

如果需要使用零初始化数组,则可以使用标题memset中声明的标准函数<string.h>

#include <string.h>

//...

memset( a, 0, sizeof( a ) );

答案 2 :(得分:1)

就像错误说的那样:你可能没有初始化一个可变大小的对象(就像那样)。您需要在循环中设置单个元素,或使用memset

for(size_t i = 0; i < N; i++){
    a[i] = 0;
}

或:

memset(a, 0, sizeof a);

请注意,memset要求您加入<string.h>

编辑sizeof a更短,看起来更好:)

答案 3 :(得分:0)

试试这个:

int N;

printf("Please enter size of array\n");

scanf("%d", &N);

int a[N];

a[0] = 0;