c - 如何初始化嵌套数组

标签 c

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

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 #

最佳答案

改变

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

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

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

正如您在评论中所问,这里是如何在没有索引的情况下做同样的事情:

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

关于c - 如何初始化嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22994251/

相关文章:

c - 基于队列数组的实现

在编译期间将文本写入文件的 C pragma

c - char* 指向哪里?

c - 如何通过 sock_stream 一次发送一个字符的字符串

c - printf ("%s\n",str);给出段错误但 printf ("%s",str);不要,其中 "str"是一个字符串指针

c - 位掩码参数命名约定?

c - 为什么我得到错误无效指针?

c++ - QScopedPointer、boost::scoped_ptr - 为什么提示类型不完整?

c - 如何用变量画一条线

c - ls 与 nohup 配合不好