5

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

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));

反而?

4

1 回答 1

5

是的,您必须为 VLA 的初始化编写代码(这可能是memset()您所描述的,或您关心的任何其他方式)。

它只是 C 标准中的一个约束(第 6.7.8 节):

  1. 要初始化的实体的类型应该是一个未知大小的数组或一个不是可变长度数组类型的对象类型。
于 2010-12-09T00:50:16.040 回答