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

时间:2018-04-01 12:00:03

标签: c pointers char singly-linked-list

我已经将问题缩小到这个非常具体的细节,但我仍然无法找到解决方案。我觉得为什么会发生这种情况,但对于指针的新手,我不知道如何修复它。

所以我有一个单独链接列表,其中包含一个函数,用于在元素的开头添加元素,另一个元素列出其元素。两者都很好。

我想通过循环,将不同的值传递给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。为什么会这样?

CODE:

    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);
    }

谢谢!

1 个答案:

答案 0 :(得分:0)

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

只需添加以下代码行: -

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

另外不要忘记释放动态分配内存。