我在用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,我不知道为什么。 如果有人可以,我会很高兴。给我解释一下。
答案 0 :(得分:0)
struct mn all_mn;
不再是数组,您不能使用索引:[0].name = {'Z', 'I', 'P'},
正确的初始化是:struct mn all_mn = {.name = {'Z', 'I', 'P'}};