c语言中文件的结尾指的是文件的最后一个字符的下一个字符

例如:文件a.txt中有三个字符abc,即文件大小为3

那么文件的实际内容如下图.

echo -n abc > a.txt


#include<stdio.h>#include<stdlib.h>intmain(void){FILE*fp=fopen("a.txt","r");if(NULL==fp){perror("fopen"),exit(-1);}intc;while(!feof(fp)){//当文件指针第一次到达文件结尾处时,feof函数返回的是0.c=getc(fp);printf("c=%d\n",c);if(ferror(fp)){perror("ferror"),exit(-1);}}fclose(fp);return0;}

c=97

c=98

c=99

c=-1




所以正确做法应该是

#include<stdio.h>#include<stdlib.h>intmain(void){FILE*fp=fopen("a.txt","r");if(NULL==fp){perror("fopen"),exit(-1);}intc;while((c=getc(fp))!=EOF){printf("c=%d\n",c);if(ferror(fp)){perror("ferror"),exit(-1);}}return0;}

c=97

c=98

c=99



如何读出文件最后一个字符c,如下:

#include<stdio.h>#include<sys/types.h>#include<fcntl.h>intmain(void){FILE*fp=fopen("a.txt","r");fseek(fp,-1,SEEK_END);charc;c=getc(fp);printf("c=%d\n",c);fseek(fp,0,SEEK_END);printf("feof(fp)=%d\n",feof(fp));//此时在文件结尾处//即文件最后一个字符(即c字符)的下一个字符处//结果为0c=getc(fp);printf("c=%d\n",c);//c=-1printf("feof(fp)=%d\n",feof(fp));//结果为1return0;}

c=99
feof(fp)=0
c=-1
feof(fp)=1