如何初始化结构类型的数组?

时间:2013-07-14 17:53:02

标签: c

typedef struct_t struct_array[ROWS][COLS];

int main()
{
    struct_array structArray1 = {0};

}

我收到一条错误消息,说初始化程序周围缺少大括号。我知道有关于此警告的gcc错误。或者我做错了什么?

3 个答案:

答案 0 :(得分:3)

您需要使用struct_array structArray1 = {{{0}}};,第一个用于数组的第一维,第二个用于第二维,第三个用于结构初始化。代码是正确的,但你的GCC是错误的,如其他答案所述。

答案 1 :(得分:2)

您的代码完全正确。你也是对的,GCC也有一个错误 - it's described here

您有几个选择:

  1. 暂时停用-Wmissing-braces

  2. 使用空的initalizer括号(GCC扩展名):

    struct_array structArray1 = {};
    
  3. 初始化一个完整的对象。对于三元素struct_t,例如:

    struct_array structArray1 = { { { 0, 0, 0 } } };
    
  4. 指定所有必要的大括号和零。假设结构类型与上面的#3相同,并且是2x2数组:

    struct_array structArray1 = { { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } },
                                  { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } } };
    
  5. 使用其他编译器。 clang,也许?

  6. 修复GCC中的错误。

答案 2 :(得分:1)

尝试:

int main(){
    struct_t structArray[ROWS][COLS];
    memset(structArray, 0, sizeof(structArray));
}

(memset用零填充)