如何将文件中的字符串加载到 C 中的链表中?

How to load strings from a file into a Linked List in C?

...我对使用堆栈溢出比较陌生,所以如果此 post.

有任何问题,请随时告诉我

我正在尝试从名为 dict 的文件中将几个单词加载到链表中。当我手动尝试打印出我加载的单词时,它只是多次打印出最后一个单词。有人看到我在这里做错了什么吗?

CELL* head = malloc(sizeof(CELL));
CELL* ptr;

while (fscanf(dict, "%s", buffer) != EOF)
{
    ptr = malloc(sizeof(CELL));
    ptr->word = buffer;
    ptr->next = NULL;

    ptr->next = head;
    head = ptr;
}

CELL *tmp;
printf("%s", head->word);
printf("%s", head->next->word);
printf("%s", head->next->next->word);

您正在将每个节点指向缓冲区。您需要制作一份副本。

您可能想要替换此行

ptr->word = buffer;

通过这两个:

    ptr->word = malloc(strlen(buffer) + 1);
    strcpy(ptr->word, buffer);

如评论中所述,列表的最后一个元素不会指向 NULL,它将是 CELL* head = malloc(sizeof(CELL)); 返回的内存中的任何值。

您可以将 head 初始化为 NULL 并删除行 ptr->next = NULL; 来解决这个问题。

这里的问题是您覆盖了 head 中的数据及其自我引用本身

假设文件内容如下

嗨,你好吗?

head 在第一次通过时是空的,当它进入循环并且 ptr 得到单词“Hi”并且您将 next 设置为 null 完成后,您将指向旁边的头部。但是你用 ptr 覆盖了 head 所以它自己引用自己 它会被覆盖。

正如变量名所暗示的,head应该是一个使用next指向链表中的下一项。