C 如何初始化嵌套数组

C 如何初始化嵌套数组,c,C,初始化以下两级嵌套数组的正确语法是什么 z3 src # cat tc.c #include <stdio.h> typedef struct level1_t { char var[15]; int value; } level1_t; typedef struct level2_t { level1_t data[3]; }

初始化以下两级嵌套数组的正确语法是什么

z3 src # cat tc.c
#include <stdio.h>

typedef struct level1_t {
        char                           var[15];
        int                            value;
} level1_t;

typedef struct level2_t {
    level1_t     data[3];
} level2_t;

level2_t level2[1] = {
                [0]={
                        [0]={"one",1},
                        [1]={"two",2},
                        [2]={"three",3}
                }
};

int main() {

        printf("%s\n",level2[0].data[1].var);
}
z3 src # gcc -ggdb -o tc tc.c
tc.c:14:4: error: array index in non-array initializer
tc.c:14:4: error: (near initialization for 'level2[0]')
tc.c:15:4: error: array index in non-array initializer
tc.c:15:4: error: (near initialization for 'level2[0]')
tc.c:15:4: error: extra brace group at end of initializer
tc.c:15:4: error: (near initialization for 'level2[0]')
tc.c:15:4: warning: excess elements in struct initializer
tc.c:15:4: warning: (near initialization for 'level2[0]')
tc.c:16:4: error: array index in non-array initializer
tc.c:16:4: error: (near initialization for 'level2[0]')
tc.c:16:4: error: extra brace group at end of initializer
tc.c:16:4: error: (near initialization for 'level2[0]')
tc.c:16:4: warning: excess elements in struct initializer
tc.c:16:4: warning: (near initialization for 'level2[0]')
z3 src #
z3 src#cat tc.c
#包括
类型定义结构级别1\u t{
char-var[15];
int值;
}1级;
类型定义结构级别2\u t{
一级数据[3];
}二级;
级别2_t级别2[1]={
[0]={
[0]={“一”,1},
[1] ={“两个”,2},
[2] ={“三”,3}
}
};
int main(){
printf(“%s\n”,level2[0]。数据[1]。变量);
}
z3 src#gcc-ggdb-o tc.c
tc.c:14:4:错误:非数组初始值设定项中的数组索引
tc.c:14:4:错误:(接近“level2[0]”的初始化)
tc.c:15:4:错误:非数组初始值设定项中的数组索引
tc.c:15:4:错误:(接近“level2[0]”的初始化)
tc.c:15:4:错误:初始值设定项末尾有额外的大括号组
tc.c:15:4:错误:(接近“level2[0]”的初始化)
tc.c:15:4:警告:结构初始值设定项中的元素过多
tc.c:15:4:警告:(接近“level2[0]”的初始化)
tc.c:16:4:错误:非数组初始值设定项中的数组索引
tc.c:16:4:错误:(接近“level2[0]”的初始化)
tc.c:16:4:错误:初始值设定项末尾有额外的大括号组
tc.c:16:4:错误:(接近“level2[0]”的初始化)
tc.c:16:4:警告:结构初始值设定项中的元素过多
tc.c:16:4:警告:(接近“level2[0]”的初始化)
Z3SRC#
更改

level2_t level2[1] = {
                [0]={
                        [0]={"one",1},
                        [1]={"two",2},
                        [2]={"three",3}
                }
};

现在,您正试图将结构初始化为数组,同时需要初始化
数据
字段

正如您在评论中所问的,这里介绍了如何在没有索引的情况下执行相同的操作:

level2_t level2[] = {
    {
        .data = {
            {"one", 1},
            {"two", 2},
            {"three", 3}
        }
    }
};
改变

现在,您正试图将结构初始化为数组,同时需要初始化
数据
字段

正如您在评论中所问的,这里介绍了如何在没有索引的情况下执行相同的操作:

level2_t level2[] = {
    {
        .data = {
            {"one", 1},
            {"two", 2},
            {"three", 3}
        }
    }
};

作为警告,此语法仅在C ISO C99(非C++)中可用。作为警告,此语法仅在C ISO C99(非C++)中可用。这是初始化整个数据结构的更好方法,因为它更具可移植性。是的,但它没有详细说明嵌套,也忽略了固定大小的数组,如果我犯了语法错误并初始化了比我应该初始化的更大的结构,该怎么办?这是初始化整个数据结构的更好方法,因为它更便于移植。是的,但它没有详细说明嵌套,而且它也忽略了数组的固定大小,如果我犯了一个语法错误,初始化了比我应该初始化的更大的结构,你知道没有方括号[0]、[1]、[2]的语法是什么吗?你知道没有方括号[0]、[1]、[2]的语法是什么吗?
level2_t level2 =
{
   {"one, 1},
   {"two, 2},
   {"three", 3}
};