从文件中逐行读取时的分配

时间:2018-01-27 23:47:20

标签: c glib

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。它是否正确?有更好的方法吗?

1 个答案:

答案 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
}