GSList* getWordList() {
GSList *list;
list = NULL;
FILE *fh;
fh = fopen("words.txt", "r");
char *s;
size_t len = 0;
ssize_t read;
while ((read = getline(&s, &len, fh)) != -1) {
list = g_slist_append(list,s);
}
fclose(fh);
return list;
}
所以我有这个代码。我知道问题在于,'s'总是等于我读到的最后一个字。我正在努力找出解决方案。
g_s_list_append
需要传递给它的GPointer,但我每次迭代都会更改值。
我对C非常陌生,试图自己崩溃...我在想的是我需要为新的char *分配内存并将其设置为等于s然后将其赋予g_slist_append。它是否正确?有更好的方法吗?
答案 0 :(得分:2)
将NULL
分配给s
,以避免在先前分配给s
的空间中读取下一个字:
char *s = NULL; // Add initialization
size_t len = 0;
ssize_t read;
while ((read = getline(&s, &len, fh)) != -1) {
list = g_slist_append(list, s);
s = NULL; // Make sure that s's memory is not reused
}