malloc结构中的结构数组

Dan*_*nMc 2 c arrays malloc struct dynamic-arrays

我有一个名为course的结构,每个课程都有多个节点(另一个结构'node').

它所拥有的节点数量各不相同,但是从我正在读取此信息的文件中获取该数字,因此该数字位于变量中.

所以我需要在struct中使用malloc.但我很困惑.我知道你可以在结构中有数组,但我不知道在哪里放置创建malloc数组的代码,因为我的struct在我的头文件中.这是我目前的代码.我意识到它看起来不对,我只是不知道如何修复它以及在哪里初始化malloc数组.

struct course {
    char identifier[2];
    int num_nodes;
    struct node *nodes;
    nodes = (struct nodes*)malloc(num_nodes*sizeof(struct node));
};

struct node {
    int number;
    char type[2];
};
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

struct node a_node;
struct course a_course;

a_course.nodes[0] = a_node;
Run Code Online (Sandbox Code Playgroud)

等等...

我没有使用太多的C,这是我一次尝试在C中使用动态数组.我的经验都来自Java,当然Java并没有像C一样使用指针,所以它都是对我来说有点困惑.

所以一些帮助将非常感谢,非常感谢:)

sim*_*onc 6

最简单的方法是创建一个初始化结构的函数:

void init_course(struct course* c, const char* id, int num_nodes)
{
    strncpy(c->identifier, id, sizeof(c->identifier));
    c->num_nodes = num_nodes;
    c->nodes = calloc(num_nodes, sizeof(struct node));
}
Run Code Online (Sandbox Code Playgroud)

对于对称性,您还可以定义析构函数

void destroy_course(struct course* c)
{
    free(c->nodes);
}
Run Code Online (Sandbox Code Playgroud)

这些用法就像

struct course c;
init_course(&c, "AA", 5);
/* do stuff with c */
destroy_course(&c);
Run Code Online (Sandbox Code Playgroud)