Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 防止更改链表中的字符*_C_Linked List_Char - Fatal编程技术网

C 防止更改链表中的字符*

C 防止更改链表中的字符*,c,linked-list,char,C,Linked List,Char,好的,在我的程序中,我有一个主函数,在这个函数中我把一个字符串输入一个缓冲区(charbuffer[20])。它将其作为char*传递给创建链表结构的函数,将结构的char*值设置为等于输入文本char*的值,然后返回结构指针并将其放在列表的前面。现在,当我输入另一个字符串来创建另一个链表结构时,它将两个结构的char*值设置为我刚才输入的文本。如何使其能够在不同的链表结构中存储不同的字符串?问题是,您放入链表中的所有指针都指向完全相同的位置—您提到的字符缓冲区[20]。每次输入新字符串时,它都

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

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

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


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

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


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

是否可以发布相关的代码片段?