当我更改字符数组时链表更改

linked list change when i change the array of character

问题是当我第二次把 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;

    }
    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

您只是在复制一个地址。因此,每个节点都指向同一个缓冲区,该缓冲区将以最后一个单词结尾。

要修复它,需要复制字符串:

tmp->ch = strdup (name)