C /为何更改清单

时间:2017-11-08 11:16:31

标签: c linked-list

div

1 个答案:

答案 0 :(得分:3)

list元素不存储字符串的副本,它只存储指向dest的指针。当您更改dest的内容时,当您通过list元素打印时,当然会看到该更改;它是相同的缓冲区。

修复方法是在list元素中创建一个副本,例如通过更改它:

element->value = x;

为:

element->value = strdup(x);

如果你有strdup()(它不是标准的,但很常见)。当然,这会让您面临分配失败的困境。您还可以使list元素包含适当的缓冲区,但这会限制您可以支持的字符串的大小。选择,选择。 :)