div
答案 0 :(得分:3)
list元素不存储字符串的副本,它只存储指向dest
的指针。当您更改dest
的内容时,当您通过list元素打印时,当然会看到该更改;它是相同的缓冲区。
修复方法是在list元素中创建一个副本,例如通过更改它:
element->value = x;
为:
element->value = strdup(x);
如果你有strdup()
(它不是标准的,但很常见)。当然,这会让您面临分配失败的困境。您还可以使list元素包含适当的缓冲区,但这会限制您可以支持的字符串的大小。选择,选择。 :)