我正在编写一个程序,但无法理解编译器错误。
arrays.c:12:21: error: flexible array member not at end of struct
arrays.c: In function 'insert':
arrays.c:22:4: warning: statement with no effect
我知道这些都是非常简单的事情,但我无法解决它们。我不确定我的插入功能是否正确。谁能帮帮我吗?谢谢
#include <stdio.h>
#define AMOUNT 7
return 0;
}
最佳答案
用空方括号[]
声明的结构成员称为灵活数组成员。 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
和ages
成员(更好的名字:name
和age
),但事实上他们什么也没做;他们引用这些成员,但不对他们做任何事情。对于 age
,您只需将 age
参数的值(您当前忽略)分配给 age
成员即可:
people[nextcell].age = age;
为 name
赋值的方式取决于您决定将其定义为指针还是数组。
关于c - 结构类型/函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486786/