Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将动态大小的可变长度数组(VLA)初始化为0_C_Arrays_Gcc_Initialization_Variable Length - Fatal编程技术网

C 将动态大小的可变长度数组(VLA)初始化为0

C 将动态大小的可变长度数组(VLA)初始化为0,c,arrays,gcc,initialization,variable-length,C,Arrays,Gcc,Initialization,Variable Length,以下代码行在堆栈上创建可变长度数组: char name[length] = {'\0'}; 生成以下编译器诊断: error: variable-sized object may not be initialized warning: excess elements in array initializer warning: (near initialization for ‘name’) 我可以使用哪些选项来初始化VLA?我是否被迫使用以下行: memset(name, 0, sizeo

以下代码行在堆栈上创建可变长度数组:

char name[length] = {'\0'};
生成以下编译器诊断:

error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)
我可以使用哪些选项来初始化VLA?我是否被迫使用以下行:

memset(name, 0, sizeof(name));

相反?

是的,您必须为VLA的初始化编写代码(可以是您所描述的
memset()
,或者您喜欢的任何其他方式)

这只是C标准(§6.7.8)中的一个约束:

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

  • 为什么我不能在同一行中这样做?@Matt Joiner:这只是语言的限制-我已经在我的答案中添加了标准中的相关文本。我认为这是为了避免像这样的边缘情况:int arr[foo]={1,2,3};其中foo可以是1或2。那么会发生什么简单地说,{0}也是不允许的,但我不确定。不能与标准争论。这不是我想听的,但你不能指望一门36岁的语言会发出响亮的声音。