C语言 防止char *在链表中改变



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

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

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

当你用完strdup返回的每个字符串时,不要忘记最终free !

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

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

相关内容

  • 没有找到相关文章