【问题标题】:Use pointer to add value to linked list without using strdup() in C使用指针向链表添加值,而无需在 C 中使用 strdup()
【发布时间】:2026-01-14 07:05:03
【问题描述】:

如何在 c 的链表中将 strdup() 替换为 strcpy() 和 malloc()?

【问题讨论】:

  • strdup 很容易用mallocstrcpy 实现,但它很常见,你应该只使用它。

标签: c linked-list strdup


【解决方案1】:

您将指针与其指向的值混淆了。如果您从代码中删除 strdup,则链表中的所有指针最终都指向同一个 char 数组,因此如果/当您更改该 char 数组中的字符串时,所有指针都会看到它。因此,要为链表的每个元素提供不同的字符串,每个元素的指针必须指向不同的 char 数组。

使用strdup 就是这样做的,使用malloc 创建一个大小正确的新字符数组,并将字符串复制到该字符数组中。因此,每个指针最终都指向一个不同的 char 数组,每个指针(可能)都有不同的字符串。要(安全地)摆脱 strdup,您需要以其他方式做同样的事情——为每个字符串创建一个新数组,这样您就可以让指针指向它。

【讨论】: