c - 结构类型/函数调用

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

最佳答案

用空方括号[]声明的结构成员称为灵活数组成员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 赋值的方式取决于您决定将其定义为指针还是数组。

关于c - 结构类型/函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486786/

相关文章:

function - 我应该写更多描述性的函数名称还是添加注释?

c - 将函数分配给C中的函数字段

c++ - 类中的结构?

c++ - 读取带分隔符的文件

C编程: Array

c - sigwait 在 MacOS 上复制和转换信号

c - 如何找到算术表达式中的第一个运算符?

c - 增加复制的指针也会增加原始指针吗?

javascript - 获取 Uncaught ReferenceError : function is not defined

javascript - 使用 Applescript 从外部文件调用 Javascript 函数