gpt4 book ai didi

c - 将节点添加到 C 中列表的末尾

转载 作者:行者123 更新时间:2023-11-30 21:24:55 27 4
gpt4 key购买 nike

我正在用 C 语言编写一个小程序来读取文件并将其包含的内容放入链接列表中。我可以使用第一个元素创建列表,但每次添加元素时,它都会覆盖之前添加的内容。

这是到目前为止我的代码:

<pre> 
struct test_struct
{
char* valeur;
char** tableau;
struct test_struct *next;
};
FILE* ouvrirFichier(char* fichier);
struct test_struct* create_list(char* ligne);
struct test_struct* add_to_list(char* ligne);
void print_list();
struct test_struct *head = NULL;
struct test_struct *curr = NULL;
//struct test_struct *ptr = NULL;
int main(int argc, char** argv)
{
//int i = 0, ret = 0;
struct test_struct *ptr = NULL;
FILE* fichier = NULL;
char ligne[121] = {0};
fichier = ouvrirFichier(argv[1]);
while(fgets(ligne, 121, fichier))
{
ptr = add_to_list(ligne);
printf("%sn", courant->valeur);
printf("%sn", ptr -> valeur);
}
print_list();
return 0;
}
struct test_struct* create_list(char* ligne)
{
//printf("n creating list with headnode as [%d]n",val);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
char* info[121] = {0};
char separateurs[] = "[]";
int j = 0;
int k = 0;
char* element;
if(NULL == ptr)
{
printf("n Node creation failed n");
return NULL;
}
for (element = strtok(ligne, separateurs); element; element = strtok(NULL, separateurs))
{
if (strcmp(element, " ") != 0 && strcmp(element, "n") != 0)
{
info[j] = element;
//printf("%sn", info[j]);
//info[j] = element;
j++;
}
}
k = j;
ptr-> valeur = info[0];
ptr -> tableau = malloc(k);
printf("%s234n", ptr -> valeur);
for (j = 1; j < k; j++)
{
ptr -> tableau[j - 1] = malloc(strlen(info[j]));
ptr -> tableau[j - 1] = info[j];
//printf("%s ", tete -> tableau[j - 1]);
}
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
FILE* ouvrirFichier(char* entree)
{
FILE* fichier = NULL;
fichier = fopen(entree, "r");
if (fichier == NULL) // Le fichier n'a pu être ouvert
{
perror("Erreur d'ouverture du fichier d'entrée ");
exit(1);
}
return fichier;
}
struct test_struct* add_to_list(char* ligne)
{
int j = 0;
int k = 0;
//char ligne[121] = {0};
char* info[121] = {0};
char* element;
char separateurs[] = "[]";
if(NULL == head)
{
return (create_list(ligne));
}
//if(add_to_end)
//printf("n Adding node to end of list with value [%d]n",val);
//else
//printf("n Adding node to beginning of list with value [%d]n",val);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("n Node creation failed n");
return NULL;
}
for (element = strtok(ligne, separateurs); element; element = strtok(NULL, separateurs))
{
if (strcmp(element, " ") != 0 && strcmp(element, "n") != 0)
{
info[j] = element;
//printf("%sn", info[j]);
info[j] = element;
j++;
}
}
k = j;
ptr-> valeur = info[0];
ptr -> tableau = malloc(k);
printf("%s123n", ptr -> valeur);
for (j = 1; j < k; j++)
{
ptr -> tableau[j - 1] = malloc(strlen(info[j]));
ptr -> tableau[j - 1] = info[j];
}
ptr->next = NULL;
return ptr;
}</pre>

文件中的内容如下所示:ab [c] [d]。

谢谢

最佳答案

当你在ptr->valeur中设置值时,你应该分配新的内存,而不是仅仅在add和create列表函数中存储指针。

所以改变

ptr-> valeur = info[0];

ptr-> valeur = strdup(info[0]);

此外,在 add_to_list() 函数中,您为要添加到列表中的节点设置了 ptr ,但您从未将其添加到列表中。如果想添加到末尾,则遍历到末尾,然后在此处添加 ptr 节点。

关于c - 将节点添加到 C 中列表的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com