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

6
下面这行代码在堆栈上创建了一个可变长度数组:
char name[length] = {'\0'};

生成以下编译器诊断信息:
error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)

我该如何初始化可变数组?我是否必须使用类似以下代码的方式:

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

改为?

1个回答

5

是的,您必须编写VLA的初始化代码(可以像您描述的那样使用memset(),也可以使用其他任何方法)。

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

  1. 要初始化的实体类型应该是一个未知大小的数组或不是可变长度数组类型的对象类型。

为什么我不能在同一行中完成它? - Matt Joiner
@Matt Joiner:这只是语言的限制 - 我已经在我的答案中添加了相关标准的文本。 - caf
1
我认为这是为了避免像这样的边缘情况: int arr[foo] = {1,2,3}; 其中foo可能是1或2。那么会发生什么呢? :p 为了简化起见,{0}也被禁止了,但我不确定。 - Maister
无法质疑标准。虽然不是我想听到的,但你不能期望从一个36岁的语言中得到花哨的功能。 - Matt Joiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接