【问题标题】:initialization problem while filling a struct in c在c中填充结构时的初始化问题
【发布时间】:2020-10-17 11:19:53
【问题描述】:

我在用 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 ....}

但我的 gcc 说:

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,我不知道为什么。 如果有人可以,我会很高兴。给我解释一下。

【问题讨论】:

  • 你的 gcc 是什么版本?我的 gcc 没有抱怨。
  • 它是 gcc 7.5.0。

标签: c struct gcc-warning


【解决方案1】:
struct mn all_mn;

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

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

【讨论】:

  • 我的错。不像那样,实际上我不会像那样填充结构,我只会这样做:. 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)",
猜你喜欢
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2020-09-23
  • 2016-10-05
  • 1970-01-01
  • 2017-06-08
相关资源
最近更新 更多