我需要让用户输入一个整数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
任何人都知道如何做到这一点?任何帮助将不胜感激!
答案 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;