好吧,在我的程序中,我有一个主函数,其中我将字符串输入到缓冲区(char buffer[20])中。它将它作为 char * 传递给创建链接列表结构的函数,将结构的 char * 值设置为等于输入文本 char *,然后返回结构指针并将其放在列表的前面。现在,当我输入另一个字符串来创建另一个链表结构时,它会将两个结构的 char * 值设置为我刚刚输入的文本。如何才能将不同的字符串存储在不同的链表结构中?
最佳答案
问题是您放入链表的所有指针都指向完全相同的位置 - 您提到的 char buffer[20]
。每次输入新字符串时,它都会覆盖缓冲区中的旧字符串。您读取的上一个指针曾经并且仍然指向字符缓冲区,现在指向最近读取的字符串。
解决方案是strdup
缓冲区,并将strdup
的结果存储在链表中。这将使用 heap 分配的空间来复制字符串(因此得名)。 ,所以每个字符串都有自己的内存。
当您使用完 strdup
返回的每个字符串时,不要忘记最终释放
它们!
关于c - 防止链表中的 char * 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714280/