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

时间:2010-12-09 00:33:42

标签: c arrays gcc initialization variable-length

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

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

相反?

1 个答案:

答案 0 :(得分:5)

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

它只是C标准中的一个约束(§6.7.8):

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