好的,所以在我的程序中,我有一个 main 函数,在该函数中我将字符串输入到缓冲区(char buffer[20])中。它将这个作为 char * 传递给创建链表结构的函数,将结构的 char * 值设置为等于输入文本 char *,然后返回结构指针并将其放在我的列表的前面。现在,当我输入另一个字符串来创建另一个链表结构时,它会将 BOTH 结构的 char * 值设置为我刚刚输入的文本。我怎样才能使它可以将不同的字符串存储在不同的链表结构中?
问问题
257 次
2 回答
1
问题是你放入链表的所有指针都指向完全相同的位置——char buffer[20]
你提到的。每次输入新字符串时,它都会覆盖缓冲区中的旧字符串。您读取的前一个指针,它曾经并且仍然指向字符缓冲区,现在指向最近读取的字符串。
解决办法是把strdup
缓冲区的结果存储strdup
在链表中。这将使用从heap分配的空间复制字符串(因此得名),因此每个字符串都有自己的内存。
当你完成它们时,不要忘记最终free
返回的每个字符串!strdup
于 2013-03-30T02:33:03.550 回答
0
您可能会写入相同的buffer
,并且有两个char *
指向该缓冲区的指针。
您需要复制缓冲区,例如使用strdup
(确保完成后释放字符串)。或者,将链表节点结构中的 a 替换为char *
a ,然后将字符串替换为那里。char [20]
strcpy
于 2013-03-30T02:33:08.677 回答