gpt4 book ai didi

c - 如何在结构体中初始化结构体数组?

转载 作者:行者123 更新时间:2023-11-30 20:11:43 25 4
gpt4 key购买 nike

我有一个结构体,其中包含另一个结构体的数组,但我在初始化该结构体时遇到问题。

typedef struct stack * Stack;
typedef struct book * Book;

struct book {
char *title;
int pages;
};

struct stack {
int num_books;
Book array[50]
};

我想做的是创建一个包含零本书的空堆栈,但我尝试的所有内容都不断出现段错误。

这是我的初始化函数:

Stack create_stack(void) {
Stack s = malloc(sizeof(struct stack) * 50);
s->num_books = 0;
// s->array[0]->title = Null;
// s->array[0]->pages = 0;
// the above 2 lines give a seg fault: 11
// I also tried:
// s->array = s->array = malloc(sizeof(struct book) * 50);
// Which gives the error that array type 'Book [50]' is not assignable
return s;
}

如何创建一个包含零本书的空书架?

最佳答案

您尚未为 struct book 对象分配内存。结构:

struct stack {
int num_books;
Book array[50];
};

array成员定义为指向book结构的指针的50个元素数组(也就是说,Book是同义词到struct book *)。这些仍然是“野”指针,您需要使用分配的结构对象来分配它们。换句话说,通过调用:

Stack s = malloc(sizeof(struct stack) * 50);

您已经为五十个struct stack类型的对象腾出了空间,但在每个结构内部,都有空间容纳struct book指针,而不是对象本身。

就像评论中提到的那样,定义指针类型是混淆代码的一种简单方法。

关于c - 如何在结构体中初始化结构体数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com