如何分配链表中字符串的内存?

How to allocate memory of a string in a linked list?

我尝试使用 strcpy 在我的链表中添加一个 char 数组,但在这种情况下我有分段错误。我知道如何为 int 分配内存,但在使用 char 数组时遇到了麻烦。我们是否需要特别为链表的每个字符数组使用 malloc?这是我的代码:

typedef struct Avion Avion;
struct Avion
{
    char *NomAvion;
    char *NomCompanie;
    int Carburant;
    int place;
    Avion *suivant;
};

typedef struct Liste Liste;
struct Liste
{
        Avion *premier;
};

void AjouterUnAvion(Liste *liste)
{   
        char nomAvion1[20] = "defaultNomAvion";
        char nomCompanie1[20] = "defaultNomCompanie" ;
        scanf("%s",nomAvion1);
        scanf("%s",nomCompanie1);
        if(liste == NULL)
        {
            exit(EXIT_FAILURE);
        }
        Avion *nouvAv = malloc(sizeof(*nouvAv));
        strcpy(nouvAv->NomAvion,nomAvion1);
        strcpy(nouvAv->NomCompanie,nomCompanie1);
        
        Avion *current = malloc(sizeof(*current));
        current = liste->premier;
       
        while(current->suivant != NULL)
        {
            current = current->suivant;
        }
        current->suivant = nouvAv;
}

int main()
{
    Liste *liste = initialisationListe();
    AjouterUnAvion(liste);
    return 0;
}

详细说明我刚刚发表的评论,当您调用 Avion *nouvAv = malloc(sizeof(*nouvAv)); 时,它不会分配 space(我相信您想要 20 个字符的名称和公司,对吗?)结构内部的指针。你可以:

  • 使这些结构成员固定大小 - 如 char nom_avion[20]
  • 为它们中的每一个分配 space,调用 malloc(或任何其他为您分配足够内存的函数)
  • 使用等号运算符使其指向现有的和已分配的永久数组(请注意,例如,当您将其置于函数内部时,可以清除内存,然后指针将指向任何地方)