以下代码行,它在堆栈上创建一个可变长度数组:
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));
相反?
答案 0 :(得分:5)
是的,您必须编写用于初始化VLA的代码(可能是您所描述的memset()
或您关注的任何其他方式。)
它只是C标准中的一个约束(§6.7.8):
- 要初始化的实体的类型应为数组 未知大小或对象类型 不是可变长度数组类型。
醇>