C 当我更改字符数组时,链表会更改
问题是当我第二次输入一个任意单词时,if语句中的q->ch会变成一个新词 .. 我希望q成为链表开始的指针C 当我更改字符数组时,链表会更改,c,string,pointers,struct,linked-list,C,String,Pointers,Struct,Linked List,问题是当我第二次输入一个任意单词时,if语句中的q->ch会变成一个新词 .. 我希望q成为链表开始的指针 while(true){ tmp=(list*)malloc(sizeof(list)); printf("\n put any word:"); scanf("%s",name); printf("\n"); tmp->ch=name; if (i==0) { q=p=tmp; } e
while(true){
tmp=(list*)malloc(sizeof(list));
printf("\n put any word:");
scanf("%s",name);
printf("\n");
tmp->ch=name;
if (i==0)
{
q=p=tmp;
}
else
{
p->nxt=tmp;
p=tmp;
}
printf("when you want to end press y \n");
scanf(" %c",&c);
if (c=='Y' || c=='y')
{
break;
}
i++;
}
q
确实指向列表中的第一个节点。问题是当你这么做的时候
tmp->ch = name
您只是在复制一个地址。因此,每个节点都指向同一个bufer,该bufer将以最后一个单词结尾
要修复它,需要复制字符串:
tmp->ch = strdup (name)
您正在将
name
的地址分配给tmp->ch
。name
的地址内容总是被scanf()
覆盖。无法使用=
符号复制字符串和字符数组。您需要使用strcpy()
和family将字符串从一个数组复制到另一个数组。但是,如果您为name
动态分配内存,并将ch
定义为char*
,那么您的解决方案就可以工作了。看起来您只有一个字符串数组,并且一直在覆盖它。每次分配一个新的名称
。非常感谢我现在知道了:)请不要在缩进代码时使用制表符,始终使用空格。最后,记住释放所有那些“dup”字符串,这样就不会产生内存泄漏。