将 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
也别忘了释放动态分配的内存。
我已经将问题缩小到这个非常具体的细节,但我仍然找不到解决方案。我有点明白为什么会这样,但作为指针的新手,我不知道如何解决它。
所以我有一个单链表,它有一个函数可以将元素添加到它的开头,另一个函数可以列出它的元素。两者都工作正常。
我想通过一个循环,将不同的值传递给 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
也别忘了释放动态分配的内存。