【发布时间】:2020-08-28 05:02:38
【问题描述】:
typedef struct Node {
char *word;
struct Node *next;
} Node;
Node* newNode(char *word) {
Node *n = malloc(sizeof(Node));
n->word = word;
n->next = NULL;
return n;
}
在这段代码(单链表)中,如果我创建了许多节点,它们都有最后一个节点的名称,我需要了解为什么在 newNode 函数中我需要使用 strdup() 函数,当我搜索对于解决方案,在这行代码中 n->word = strdup(word); 并在堆中创建 word 的副本。
如果我使用malloc(sizeof(Node));,这意味着在堆中为该节点保留一个位置,这样每个节点都应该是独立的,为什么它们共享最后一个节点的名称?
【问题讨论】:
-
在这种情况下,您不一定需要
strdup。这取决于您在调用newNode时为word传递的内容,以及您是否希望它每次都指向同一个字符串缓冲区或一个新缓冲区。 -
您的问题不清楚..“在堆上保留一个位置”是什么意思?和“分享”?以及如何用
word调用这个函数? -
您可能每次都使用缓冲区调用
newNode,即像char myInput[100]; .....; newNode(myInput)这样您的所有节点都指向该缓冲区。 -
你需要发布你如何称呼
newNode -
@PaulOgilvie 我的意思是 malloc 为该指针提供了它需要的空间并共享意味着我创建的所有节点都与最后一个节点具有相同的单词
标签: c linked-list copy singly-linked-list c-strings