使用指针向链表添加值,而无需在 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
很容易用malloc
和strcpy
实现,但它很常见,你应该只使用它。
【参考方案1】:
您将指针与其指向的值混淆了。如果您从代码中删除 strdup
,则链表中的所有指针最终都指向同一个 char 数组,因此如果/当您更改该 char 数组中的字符串时,所有指针都会看到它。因此,要为链表的每个元素提供不同的字符串,每个元素的指针必须指向不同的 char 数组。
使用strdup
就是这样做的,使用malloc
创建一个大小正确的新字符数组,并将字符串复制到该字符数组中。因此,每个指针最终都指向一个不同的 char 数组,每个指针(可能)都有不同的字符串。要(安全地)摆脱 strdup,您需要以其他方式做同样的事情——为每个字符串创建一个新数组,这样您就可以让指针指向它。
【讨论】:
以上是关于使用指针向链表添加值,而无需在 C 中使用 strdup()的主要内容,如果未能解决你的问题,请参考以下文章