首页 > 解决方案 > 如何确定文件的结尾?

问题描述

如何确定文件的结尾?

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在这种情况下不起作用?

标签: c

解决方案


fgetc函数返回一个int,并且该值将EOF在文件末尾。这是典型的做法:

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

推荐阅读