-2

我正在开发一个程序,但无法理解编译器错误。

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

1 回答 1

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;

大概是为了初始化namesandages成员(更好的名字:nameand age),但实际上它们什么都不做;他们指的是那些成员,但他们不对他们做任何事情。对于age,您可以简单地将age参数的值(您当前正在忽略)分配给age成员:

people[nextcell].age = age;

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

于 2012-07-14T20:18:49.443 回答