在C中逐行读取文件,concat在realloc之后不起作用

时间:2014-10-07 07:15:46

标签: c

就像在主题中一样,我尝试逐行读取文件,但程序没有按照我的意愿行事。所以我试着检查,如果最后有一个\ 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);

但是在重新分配之后,甚至没有阅读整行,并且他一直进入(否则部分

1 个答案:

答案 0 :(得分:0)

fgets读得太多了。首先realloc line_pos为9999且max_line_len为20000,这意味着当line的最后一个有效索引仅为19999时,您最终会读取索引9999 .. 29999