防止链表中的char *发生变化

时间:2013-03-30 02:30:29

标签: c linked-list char

好的,所以在我的程序中,我有一个main函数,我在其中输入一个字符串到缓冲区(char buffer [20])。它将此作为char *传递给创建链接列表结构的函数,将结构的char *值设置为等于输入文本char *,然后返回结构指针并将其放在列表的前面。现在当我输入另一个字符串来创建另一个链表结构时,它将结构的char *值设置为我刚放入的文本。我怎样才能使它能够在不同的链表结构中存储不同的字符串?

2 个答案:

答案 0 :(得分:1)

问题在于,您放入链接列表的所有指针都指向完全相同的位置 - 您提到的char buffer[20]。每次输入新字符串时,它都会覆盖缓冲区中的旧字符串。您读取的前一个指针(现在仍然指向字符缓冲区)现在指向最近读取的字符串。

解决方案是strdup缓冲区并将strdup的结果存储在链表中。这将使用从heap分配的空间复制字符串(因此名称),因此每个字符串都有自己的内存。

当你完成它们时,不要忘记最后free strdup返回的每个字符串!

答案 1 :(得分:0)

您可能会写入相同的buffer,并且有两个char *指向该缓冲区的指针。

您需要复制缓冲区,例如使用strdup(确保在完成后释放字符串)。或者,将char *替换为链接列表节点结构中的char [20],并将strcpy字符串替换为其中。