我基本上是从Excel文件中提取字符串以将它们存储在数组中。将它们分配到我的阵列时遇到了问题。
这是excel文件的一行:
Beutegier;Jack Ketchum;Heyne;2009;3453675622
这是我功能的一部分:
buecher[*num_buch].autor = NULL;
buecher[*num_buch].titel = strdup(strtok(linebuf, delim)); //Works correctly
char *str1 = strtok(NULL, delim); //This extracts the name which is : Jack Ketchum
buecher[*num_buch].autor->name = strdup(str1); //Program crashes here
这是我的结构:
typedef struct {
char *name; /* Zeiger auf vollstdg. Namen dieses Autors */
unsigned short anz_buecher; /* Anzahl der Bücher dieses Autors */
} Autor;
/* Struktur einer Buch-Definition */
typedef struct {
char *titel; /* Zeiger auf Titelstring */
Autor *autor; /* Zeiger auf Element des Autoren-arrays */
Verlag *verlag; /* Zeiger auf Element des Verlage-arrays */
unsigned short erscheinungsjahr; /* Jahreszahl 4-stellig, z. B.: 2009 */
char *isbn; /* Zeiger auf ISBN-string */
} Buch;
我不知道为什么程序在那行崩溃。我几乎对第一行做了同样的事情,并且在那里正确地工作了。
答案 0 :(得分:1)
问题是由于autor
是NULL
指针:
buecher[*num_buch].autor = NULL;
随后尝试通过它进行存储:
buecher[*num_buch].autor->name = strdup(str1);
这试图将name
结构指针的Autor
字段设置为autor
。但这只是一个NULL
指针,没有Autor
结构,因此没有要存储的name
字段。
您可以通过将第一个作业更改为以下内容来解决此问题:
buecher[*num_buch].autor = malloc(sizeof(Autor));
检查malloc
返回的值以确保它不是NULL
也是一种好习惯。
不要忘记,以后您需要释放malloc
,strdup
等返回的存储,以避免内存泄漏。