用空方括号声明的结构成员[]称为灵活数组成员。这在comp.lang.c FAQ的问题 2.6 中有解释(一直滚动到底部)。灵活的数组成员可能仅作为结构的最后声明的成员出现,这是您的编译器所抱怨的。
但是将它移到结构的末尾并不是最好的解决方案;您可能根本不想使用灵活的数组成员。(你可以,但它引入了不必要的复杂性。)
正如 dasblinkenlight 所说,您可以使name成员成为指针:
struct person {
char *name;
int age;
};
name然后将指向一个代表人名的字符串——这意味着您需要分配内存来保存该字符串。
或者您可以制作name一个具有固定最大大小的 数组char:
#define MAX_NAME 50
struct person {
char name[MAX_NAME];
int age;
};
然后,您可以使用该strcpy函数将一个值复制到其中name——注意不要尝试复制超过MAX_NAME字节的内容。
在您的insert函数中,这些语句:
people[nextcell].names;
people[nextcell].ages;
大概是为了初始化namesandages成员(更好的名字:nameand age),但实际上它们什么都不做;他们指的是那些成员,但他们不对他们做任何事情。对于age,您可以简单地将age参数的值(您当前正在忽略)分配给age成员:
people[nextcell].age = age;
分配值的方式name取决于您决定将其定义为指针还是数组。