将 char* 传递给单独列出的列表会更改其所有元素

Passing char* to singly listed list changes all its elements

我已经将问题缩小到这个非常具体的细节,但我仍然找不到解决方案。我有点明白为什么会这样,但作为指针的新手,我不知道如何解决它。

所以我有一个单链表,它有一个函数可以将元素添加到它的开头,另一个函数可以列出它的元素。两者都工作正常。

我想通过一个循环,将不同的值传递给 char *variable,然后再使用 insert(variable) 函数将其添加到单向链表。

这是我得到的行为:

    variable = "aa";
    insert(variable);
    list();

List: aa

    variable = "aa";
    insert(variable);
    variable = "bb";
    insert(variable);
    list();

List: bb bb

    variable = "aa";
    insert(variable);
    variable = "bb";
    insert(variable);
    variable = "cc";
    insert(variable);
    list();

List: cc cc cc

显然想要的结果是:List: cc bb aa。为什么会这样?

代码:

    while (fgets(word_in_file, LENGTH, file) != NULL) {
        word_to_add = malloc((LENGTH) * sizeof(char));
        strcpy(word_to_add, word_in_file);
        insert(word_to_add);
    }

谢谢!

你的问题是你正在使用指向相同内存位置的相同字符指针。所以你输入的最后一个值将反映在所有地方。最好每次在您输入值之前动态分配内存。

只需添加以下代码行:-

variable = malloc(3);
strcpy(variable, "aa");
insert(variable);
variable = malloc(3);
strcpy(variable, "bb");
insert(variable);
variable = malloc(3);
strcpy(variable, "cc");
insert(variable);

现在你会得到 aa, bb, cc

也别忘了释放动态分配的内存。