所以我有一个名为 'library' 的结构,它存储结构 'books' 的对象,并由 3 本书的列表初始化,但是当我尝试打印对象的属性时,我得到一个“分段错误(核心已转储) “ 错误。我知道这意味着我正在尝试访问一些我无权访问的内存,但在这种情况下我可以正确访问第一个元素,所以它让我相信我错误地初始化了一些东西。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXBOOKS 10
typedef struct books
{
char* title;
char* author;
int id;
}book;
typedef struct library
{
int number_of_books;
book* booklist [MAXBOOKS];
}lib;
void storeBook(lib library,book CurrentBook)
{
library.booklist[0] = &CurrentBook;
}
void printLibrary(lib library)
{
for(int i = 0; i < library.number_of_books; i++)
{
printf("Author:%s\n",library.booklist[i]->title);
}
}
int main()
{
book b_1 = {"The trial","Kafka",101};
book b_2 = {"The lurking fear","Lovecraft",102};
book b_3 = {"Dora's storytime collection","Valdes",103};
book* list = (book*)malloc(3*sizeof(book));
list[0] = b_1; list[1] = b_2; list[2] = b_3;
lib CurrentLibrary = {3,{list}};
printLibrary(CurrentLibrary);
return 0;
}
booklist1[i] = *(booklist1+i)
, 那么booklist2[i][j] = *(*(booklist2+i)+j)
, 如果j=0
, 那么*(*(booklist2+i)+j) = *(*(booklist2+i)+0) = *(booklist2[i]) = *booklist2[i]
booklist2[0]
指向第一行,booklist2[1]
指向第二行,依此类推……等等。
您正在定义一个书本指针数组(二维数组):book* booklist [MAXBOOKS]
但是list
是一个书本数组(一维数组)。执行此语句后,lib CurrentLibrary = {3,{list}};
list
数组将存储到booklist[0]
行中。但是所有其他指针booklist[1], booklist[2],..... booklist[9]
都没有指向任何元素。但是,你正在访问booklist[1]
,booklist[2]
以及booklist[3]
在printLibrary
功能。这就是分段错误的原因。
如需更多信息(对于二维数组),请打印以下几行:
printf("Title %s\n", library.booklist[0][0].title);
版画-->标题审判printf("Title %s\n", library.booklist[0][1].title);
版画-->标题潜伏的恐惧
printf("Title %s\n", library.booklist[0][2].title);
版画-->标题朵拉的故事时间合集
但是尝试访问library.booklist[1][0].title
会引发分段错误,因为第二行指针未指向任何元素。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXBOOKS 10
typedef struct books
{
char* title;
char* author;
int id;
}book;
typedef struct library
{
int number_of_books;
book *booklist; // It should be 1-D array, since you are passing 1-D array of book
}lib;
void storeBook(lib library,book CurrentBook)
{
library.booklist[0] = CurrentBook;
}
void printLibrary(lib library)
{
for(int i = 0; i < library.number_of_books; i++)
{
printf("Title:%s\n",library.booklist[i].title);
printf("Author:%s\n",library.booklist[i].author);
printf("Book ID:%d\n",library.booklist[i].id);
}
}
int main()
{
book b_1 = {"The trial","Kafka",101};
book b_2 = {"The lurking fear","Lovecraft",102};
book b_3 = {"Dora's storytime collection","Valdes",103};
book* list = malloc(3*sizeof(book));
list[0] = b_1; list[1] = b_2; list[2] = b_3;
lib CurrentLibrary = {3,list}; // list is 1-D array of book
printLibrary(CurrentLibrary);
return 0;
}
输出 :
Title:The trial
Author:Kafka
Book ID:101
Title:The lurking fear
Author:Lovecraft
Book ID:102
Title:Dora's storytime collection
Author:Valdes
Book ID:103
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句