如何将文件中的字符串加载到 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指向链表中的下一项。
...我对使用堆栈溢出比较陌生,所以如果此 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指向链表中的下一项。