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

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

  1. 要初始化的实体的类型应为未知大小或不是可变长度数组类型的对象类型的数组。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top