结构类型/函数调用

时间:2012-07-14 19:29:39

标签: c function struct

我正在编写程序,无法理解编译器错误。

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;
}

1 个答案:

答案 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;

可能是为了初始化namesages成员(更好的名字:nameage),但事实上他们什么都不做;他们指的是那些成员,但他们没有对他们做任何事情。对于age,您只需将age参数(您当前忽略的)的值分配给age成员:

people[nextcell].age = age;

name赋值的方法取决于您是将其定义为指针还是数组。

相关问题