在C中填充结构时出现初始化问题

时间:2020-10-17 11:19:53

标签: c struct gcc-warning

我在用c填充结构时遇到了一个问题。的。我程序的目标是测试文件中的幻数以了解其“类型”。 我的结构看起来像这样:

struct mn {
        char code[6];
        char name[30];
};

然后我填充结构:


struct mn all_mn[7] = {
    [0].code = {75, 80, 0, 0, 0, 0},
    [0].name = "ZIP",
    [1].code = {0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C},
    [1].name = "7z",
    [2].code = {0x25, 0x50, 0x44, 0x46, 0x2D, 0},
    [2].name = "PDF",
    [3].code = {0x49, 0x44, 0x33, 0, 0, 0},
    [3].name = "MP3",
    [4].code = {0x49, 0x49, 0x2A, 0x00, 0, 0},
    [4].name = "TIFF(little endian)",
    [5].code = {0x4D, 0x4D, 0x00, 0x2A, 0, 0},
    [5].name = "TIFF(big endian)",
    [6].code = {0x23, 0x21, 0, 0, 0, 0},
    [6].name = "shebang"};

我实际上没有错

struct mn all_mn[X] = {[X].code ....}

但是我的海湾合作委员会说:

tp1_nico.c:24:5: error: missing initializer for field 'name' of 'struct mn' [-Werror=missing-field-initializers]
   24 |     [0].name = {'Z', 'I', 'P'},
      |     ^
tp1_nico.c:19:14: note: 'name' declared here
   19 |         char name[30];
      |              ^~~~

对于struct中的每个.name,我不知道为什么。 如果有人可以,我会很高兴。给我解释一下。

1 个答案:

答案 0 :(得分:0)

struct mn all_mn;

不再是数组,您不能使用索引:[0].name = {'Z', 'I', 'P'},

正确的初始化是:struct mn all_mn = {.name = {'Z', 'I', 'P'}};