从文件中逐行读取时的赋值
Assignment when reading line by line from file
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。这个对吗?有更好的方法吗?
将 NULL
分配给 s
以避免将下一个单词读入先前分配给 s
的 space:
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
}
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。这个对吗?有更好的方法吗?
将 NULL
分配给 s
以避免将下一个单词读入先前分配给 s
的 space:
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
}