【发布时间】:2018-12-04 11:12:48
【问题描述】:
我正在尝试通过添加节点的函数将新节点添加到链表。但是当我打印列表时,似乎所有节点中的数据都被最近添加的数据替换了。
typedef struct things {
char *string;
struct things *next;
} something;
void addnode(something **head, char *str);
void printlist(something **head);
int main()
{
int i;
char word[50];
something *head = NULL;
puts("How many strings?");
scanf("%d", &i);
while(i > 0)
{
scanf("%49s", word);
addnode(&head, word);
i--;
}
printlist(&head);
return 0;
}
void addnode(something **head, char *str)
{
something *last = *head;
something *newnode;
newnode = malloc(sizeof(something));
newnode->string = malloc(50*sizeof(char));
newnode->string = str;
newnode->next = NULL;
if ((*head)==NULL)
{
(*head) = newnode;
return;
}
else
{
while(last->next != NULL)
{
last=last->next;
}
last->next = newnode;
return;
}
}
void printlist(something **head) //print contents of list, to check if list was created
{
puts("print");
something *current = *head;
while(current != NULL)
{
printf("%s", current->string);
current=current->next;
}
}
这就是我想出的。当我输入说5个字onetwothreefourfive,我得到输出five five five five five。这是我尝试打印的方式的问题吗?还是我如何传递指针和链接节点?
【问题讨论】:
-
你也要复制
word的内容。现在它们都指向同一个缓冲区word,因此都将显示相同的值。 :-) -
newnode->string = malloc(50*sizeof(char)); newnode->string = str;这不是复制字符串的方法(另外:你在这里泄漏内存)而是使用strcpy()(或strdup()整个字符串)
标签: c singly-linked-list