如何确定文件结尾?

时间:2018-08-27 12:11:48

标签: c

如何确定文件结尾?

FILE* cfl;
if ((cfl=fopen(csv, "r")) == NULL) {
    printf("Cannot open file for read.\r\n");
    exit(1);
}
while (!feof(cfl)) {
    int i = 0;
    char* buf = (char*)malloc(sizeof(char));
    while ((buf[i] = fgetc(cfl)) != '\n') {
        i++;
        buf = (char*)realloc(buf, sizeof(char)*(i+1));
        printf("=%d= ", i);
    }
    buf[i] = '\0';
    printf("+%d+ ", i);
    printf("%s\r\n", buf);
   free(buf);
}

fclose(cfl);

一切正常,直到最后一行。由于文件在最后一个换行符之后结束,因此程序在while ((buf[i] = fgetc(cfl)) != '\n') {...}

中循环

在检查 “ i” 是否不超过某个较大的值之后,我可以中断循环,但这是错误的。如何正确确定文件的结尾以及为什么 feof 在这种情况下不起作用?

1 个答案:

答案 0 :(得分:7)

fgetc函数返回一个int,文件末尾的值为EOF。这是典型的方法:

int c;
while ((c = fgetc(cfl)) != EOF) {
    ...
}