将动态大小的可变长度数组(VLA)初始化为0
以下代码行,在堆栈上创建一个可变长度数组:
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节):
- 要初始化的实体的类型应该是未知大小的数组或不是可变长度数组类型的对象类型。