问题描述
我在用c填充结构时遇到了一个问题。的。我程序的目标是测试文件中的幻数以了解其“类型”。 我的结构看起来像这样:
struct mn {
char code[6];
char name[30];
};
然后我填充结构:
struct mn all_mn[7] = {
[0].code = {75,80,0},[0].name = "ZIP",[1].code = {0x37,0x7A,0xBC,0xAF,0x27,0x1C},[1].name = "7z",[2].code = {0x25,0x50,0x44,0x46,0x2D,[2].name = "PDF",[3].code = {0x49,0x33,[3].name = "MP3",[4].code = {0x49,0x49,0x2A,0x00,[4].name = "TIFF(little endian)",[5].code = {0x4D,0x4D,[5].name = "TIFF(big endian)",[6].code = {0x23,0x21,[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,我不知道为什么。 如果有人可以,我会很高兴。给我解释一下。
解决方法
struct mn all_mn;
不再是数组,您不能使用索引:[0].name = {'Z','I','P'},
正确的初始化是:struct mn all_mn = {.name = {'Z','P'}};