【发布时间】:2021-03-09 05:35:42
【问题描述】:
我正在尝试在函数中创建一个维度为 n 的数组,我不明白为什么编译器会给我这个错误:
错误:可变大小的对象可能未初始化
警告:数组初始化器中有多余的元素
代码如下,程序当然没有完成,因为我无法让它工作,并且在类似的项目中它给了我同样的错误:
#include <stdio.h>
#include <stdlib.h>
//given a number, find all binary numbers with that number of digits
int gen_num(int);
int main()
{
int n;
printf("Insert a number: ");
scanf("%d",&n);
gen_num(n);
return 0;
}
int gen_num(int n){
int num[n]={0};
return 0;
}
如果我尝试不在声明中初始化,但例如我尝试要求用户输入一些值,它会给我同样的错误,因为数组是使用维度 0 创建的
提前致谢
【问题讨论】:
-
提示:当您遇到错误时,只需将其直接粘贴到您最喜欢的搜索引擎中,作为发布问题之前要做的最少研究。
-
提示:颠倒这些定义的顺序,您将不需要顶部几乎无用的声明。在 C 代码中,您应该首先编写前导函数,然后在结尾处或接近结尾处编写 main。
-
问题是我使用的是 2011 C,所以这不应该发生,我一直使用这个符号,从来没有遇到过问题
-
C11 6.7.9/3 "要初始化的实体的类型应该是一个未知大小的数组或者一个完整的对象类型,不是变长数组类型 。” (强调我的)。
-
你指的是什么符号?如果您的意思是 VLA(可变长度数组)
int num[n],那不是问题。问题是 VLA 不允许使用的初始化程序。
标签: arrays c function recursion