用空方括号声明的结构成员[]
称为灵活数组成员。这在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;
大概是为了初始化names
andages
成员(更好的名字:name
and age
),但实际上它们什么都不做;他们指的是那些成员,但他们不对他们做任何事情。对于age
,您可以简单地将age
参数的值(您当前正在忽略)分配给age
成员:
people[nextcell].age = age;
分配值的方式name
取决于您决定将其定义为指针还是数组。