C:无法将结构的字符串分配给数组

时间:2020-11-06 23:54:29

标签: c

我基本上是从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;

我不知道为什么程序在那行崩溃。我几乎对第一行做了同样的事情,并且在那里正确地工作了。

1 个答案:

答案 0 :(得分:1)

问题是由于autorNULL指针:

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也是一种好习惯。

不要忘记,以后您需要释放mallocstrdup等返回的存储,以避免内存泄漏。