我正在编写程序,无法理解编译器错误。
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;
}
答案 0 :(得分:1)
使用空方括号[]
声明的结构成员称为灵活数组成员。这在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
赋值的方法取决于您是将其定义为指针还是数组。