a.txt#include&n..."/>
您好,登錄后才能下訂單哦!
c語(yǔ)言中文件的結(jié)尾指的是文件的最后一個(gè)字符的下一個(gè)字符
例如:文件a.txt中有三個(gè)字符abc,即文件大小為3
那么文件的實(shí)際內(nèi)容如下圖.
echo -n abc > a.txt
#include <stdio.h> #include <stdlib.h> int main(void){ FILE* fp = fopen("a.txt","r"); if(NULL==fp){ perror("fopen"),exit(-1); } int c; while(!feof(fp)){ //當(dāng)文件指針第一次到達(dá)文件結(jié)尾處時(shí),feof函數(shù)返回的是0. c = getc(fp); printf("c=%d\n",c); if(ferror(fp)){ perror("ferror"),exit(-1); } } fclose(fp); return 0; }
c=97
c=98
c=99
c=-1
所以正確做法應(yīng)該是
#include <stdio.h> #include <stdlib.h> int main(void){ FILE* fp = fopen("a.txt","r"); if(NULL==fp){ perror("fopen"),exit(-1); } int c; while((c=getc(fp))!=EOF){ printf("c=%d\n",c); if(ferror(fp)){ perror("ferror"),exit(-1); } } return 0; }
c=97
c=98
c=99
如何讀出文件最后一個(gè)字符c,如下:
#include <stdio.h> #include <sys/types.h> #include <fcntl.h> int main(void){ FILE* fp = fopen("a.txt","r"); fseek(fp,-1,SEEK_END); char c; c = getc(fp); printf("c=%d\n",c); fseek(fp,0,SEEK_END); printf("feof(fp)=%d\n",feof(fp));//此時(shí)在文件結(jié)尾處 //即文件最后一個(gè)字符(即c字符)的下一個(gè)字符處 //結(jié)果為0 c = getc(fp); printf("c=%d\n",c); //c=-1 printf("feof(fp)=%d\n",feof(fp));//結(jié)果為1 return 0; }
c=99
feof(fp)=0
c=-1
feof(fp)=1
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。