就像在主题中一样,我尝试逐行读取文件,但程序没有按照我的意愿行事。所以我试着检查,如果最后有一个\ n,如果不是行的空间不够,那么我重新分配它,并放置行的位置 - >到旧的长度,以便连接下一个将要阅读的内容:
int max_line_len = 10000;
int line_pos = 0;
char *line;
line = malloc(sizeof(char)*max_line_len);
while (fgets(&line[line_pos], max_line_len, file) != NULL) {
int line_length = strlen(line);
if (line[line_length - 1] == '\n') {
// do something to the lines
line_pos = 0;
} else {
max_line_len *= 2;
line_pos = line_length;
line = realloc(sizeof(char) * max_line_len);
}
}
}
fclose(file);
free(line);
但是在重新分配之后,甚至没有阅读整行,并且他一直进入(否则部分
答案 0 :(得分:0)
fgets
读得太多了。首先realloc
line_pos
为9999且max_line_len
为20000,这意味着当line
的最后一个有效索引仅为19999时,您最终会读取索引9999 .. 29999