使用指针向链表添加值而不使用 C 中的 strdup()
Use pointer to add value to linked list without using strdup() in C
如何用 c 的链表中的 strcpy() 和 malloc() 替换 strdup()?
您将指针与其指向的值混淆了。如果从代码中删除 strdup
,链表中的所有指针最终都指向同一个 char 数组,因此 if/when 您更改该 char 数组中的字符串,所有指针都会看到它.因此,要使链表的每个元素具有不同的字符串,每个元素的指针必须指向不同的 char 数组。
使用 strdup
正是这样做的,使用 malloc
创建一个正确大小的新 char 数组并将字符串复制到该 char 数组中。所以每个指针最终指向一个不同的 char 数组,每个数组(可能)有一个不同的字符串。要(安全地)摆脱 strdup,您需要以其他方式做同样的事情——为每个字符串创建一个新数组,这样您就可以将指针指向它。
如何用 c 的链表中的 strcpy() 和 malloc() 替换 strdup()?
您将指针与其指向的值混淆了。如果从代码中删除 strdup
,链表中的所有指针最终都指向同一个 char 数组,因此 if/when 您更改该 char 数组中的字符串,所有指针都会看到它.因此,要使链表的每个元素具有不同的字符串,每个元素的指针必须指向不同的 char 数组。
使用 strdup
正是这样做的,使用 malloc
创建一个正确大小的新 char 数组并将字符串复制到该 char 数组中。所以每个指针最终指向一个不同的 char 数组,每个数组(可能)有一个不同的字符串。要(安全地)摆脱 strdup,您需要以其他方式做同样的事情——为每个字符串创建一个新数组,这样您就可以将指针指向它。