我已经将问题缩小到这个非常具体的细节,但我仍然无法找到解决方案。我觉得为什么会发生这种情况,但对于指针的新手,我不知道如何修复它。
所以我有一个单独链接列表,其中包含一个函数,用于在元素的开头添加元素,另一个元素列出其元素。两者都很好。
我想通过循环,将不同的值传递给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);
}
谢谢!
答案 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
另外不要忘记释放动态分配内存。