【发布时间】:2026-01-14 07:05:03
【问题描述】:
如何在 c 的链表中将 strdup() 替换为 strcpy() 和 malloc()?
【问题讨论】:
-
strdup很容易用malloc和strcpy实现,但它很常见,你应该只使用它。
标签: c linked-list strdup
如何在 c 的链表中将 strdup() 替换为 strcpy() 和 malloc()?
【问题讨论】:
strdup 很容易用malloc 和strcpy 实现,但它很常见,你应该只使用它。
标签: c linked-list strdup
您将指针与其指向的值混淆了。如果您从代码中删除 strdup,则链表中的所有指针最终都指向同一个 char 数组,因此如果/当您更改该 char 数组中的字符串时,所有指针都会看到它。因此,要为链表的每个元素提供不同的字符串,每个元素的指针必须指向不同的 char 数组。
使用strdup 就是这样做的,使用malloc 创建一个大小正确的新字符数组,并将字符串复制到该字符数组中。因此,每个指针最终都指向一个不同的 char 数组,每个指针(可能)都有不同的字符串。要(安全地)摆脱 strdup,您需要以其他方式做同样的事情——为每个字符串创建一个新数组,这样您就可以让指针指向它。
【讨论】: