将动态大小的可变长度数组(VLA)初始化为0

Mat*_*ner 5 c arrays gcc initialization variable-length

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

char name[length] = {'\0'};
Run Code Online (Sandbox Code Playgroud)

生成以下编译器诊断:

error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)
Run Code Online (Sandbox Code Playgroud)

有哪些选项可用于初始化VLA?我被迫使用如下行:

memset(name, 0, sizeof(name));
Run Code Online (Sandbox Code Playgroud)

代替?

caf*_*caf 5

是的,您必须编写用于初始化VLA的代码(可能memset()与您所描述的类似,或者您关注的任何其他方式).

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

  1. 要初始化的实体的类型应该是未知大小的数组或不是可变长度数组类型的对象类型.