【发布时间】:2015-03-29 18:48:59
【问题描述】:
很抱歉问了一个我认为是愚蠢的问题,但我觉得我的概念非常错误,需要解决它。
我有这个列出链接的代码,我已经玩了一点来让我的头脑围绕它:
http://www.thegeekstuff.com/2012/08/c-linked-list-example/
现在我需要用同样的方式来操作列表,但不是结构是 int val,而是我希望它是 char * val,所以结构应该是这样的:
struct nodoTemas{
char * nombreTema;
struct nodoSuscriptor * nodoCerodeSuscriptores;
struct nodoTemas * next;
};
我从这样的文件中读取字符 *:
while ((read = getline(&line, &len, fp)) != -1) {
add_to_list(line,true);
}
我根本无法在概念层面上找到差异。是的,getline 在 char * 中添加了一个 \n,所以它有点弄乱我的 fprintf 等等,但我从执行代码中得到的结果是:
creating list with headnode as [tema1
]
Adding node to end of list with value [tema2
]
-------Printing list Start-------
[tema2
]
[tema2
]
应该是什么时候
-------打印列表开始-------
[tema1
]
[tema2
]
因为那是它首先得到的!!!我只是看不出有什么区别,我重新阅读了有关 char*、char 和 char[] 的信息,我重新阅读了 getline man,我只是不明白为什么链接中的代码有效与 int 完美搭配,如果我使用 char*,它会正确添加和迭代,然后有点……崩溃并覆盖?这就是正在发生的事情吗?没有线索。
另外,如果我应该在其他地方发布此内容,请告诉我。
我也找到了这篇文章,但我认为问题出在我的情况下,但不完全确定
【问题讨论】:
-
你没有显示你的代码,所以我们无法判断它有什么问题。疯狂的猜测时间:您不会在每次迭代时将参数重置为
getline(),因此下一行会覆盖前一行。 -
鉴于您尚未发布插入代码,因此尚不清楚,但我猜您没有分配内存来存储您读入的字符串。请注意,指针只是 points 指向内存,它不存储您指向的字符串,它只存储 where 字符串所在的位置。当您打印该指针时,它会在它指向的位置打印字符串。您链接的问题也这样做了,用 strdup 查看答案。
-
我要添加所有代码吗?害怕这样做,所以帖子会很长。另外,我怀疑 string/getline 的事情,但我想不通,我感觉很愚蠢。这有意义吗? while ((read = getline(&line, &len, fp)) != -1) { add_to_list(line,true); }
标签: c list linked-list getline