代码之家  ›  专栏  ›  技术社区  ›  Ben

从文件逐行读取时的赋值

  •  2
  • Ben  · 技术社区  · 8 年前
    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非常陌生,我自己也在尝试速成课程。。。我想的是,我需要为一个新字符*分配内存,并将其设置为s,然后将其分配给g\u slist\u append。这是正确的吗?有没有更好的方法?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Sergey Kalinichenko    8 年前

    分配 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
    }