如何分配链表中字符串的内存?
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(或任何其他为您分配足够内存的函数)
- 使用等号运算符使其指向现有的和已分配的永久数组(请注意,例如,当您将其置于函数内部时,可以清除内存,然后指针将指向任何地方)
我尝试使用 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(或任何其他为您分配足够内存的函数)
- 使用等号运算符使其指向现有的和已分配的永久数组(请注意,例如,当您将其置于函数内部时,可以清除内存,然后指针将指向任何地方)