使用指针向链表添加值,而无需在 C 中使用 strdup()

Posted

技术标签:

【中文标题】使用指针向链表添加值,而无需在 C 中使用 strdup()【英文标题】:Use pointer to add value to linked list without using strdup() in C 【发布时间】:2022-01-20 16:52:49 【问题描述】:

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

【问题讨论】:

strdup 很容易用mallocstrcpy 实现,但它很常见,你应该只使用它。 【参考方案1】:

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

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

【讨论】:

以上是关于使用指针向链表添加值,而无需在 C 中使用 strdup()的主要内容,如果未能解决你的问题,请参考以下文章

C:在struct中添加链表导致null错误

如何更改指针变量的值并将更改保留在函数之外而无需通过引用传递?

删除有序链表中的重复结点

Kotlin协程源码分析-7 Context左向链表

为啥不使用指针数组来优化链表而使用跳过列表呢?

例说Linux内核链表