【发布时间】:2021-05-25 07:17:44
【问题描述】:
...我对使用堆栈溢出比较陌生,所以如果这篇文章有什么问题,请随时告诉我。
我正在尝试将一个名为 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->next = NULL;,然后立即再次设置ptr->next = head;。您在开头分配的初始head也未使用并丢失。我建议您更仔细地考虑您的代码。边做边准备好老式的铅笔和纸,然后画出你的数据和它发生了什么。
标签: c pointers linked-list scanf