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