c - 防止链表中的 char * 改变

标签 c linked-list char

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

最佳答案

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

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

当您使用完 strdup 返回的每个字符串时,不要忘记最终释放它们!

关于c - 防止链表中的 char * 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714280/

相关文章:

c - C 中的临时文件

c - 用 C 读取二进制文件的奇怪结果

java链表问题

c++ - 从单链循环列表中删除特定节点

C++将字符数组写入带有填充的文件

java - java字符串中的特殊字符

c - 编译器如何处理超出范围的 char 值?

c++ - 使用 openmp 无法达到所需的速度

c - 为什么这对别人有效,对我却无效?

c++ - 内存释放双向链表C++