a.txt#include&n..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

文件的結(jié)尾和文件開(kāi)頭

發(fā)布時(shí)間:2020-07-26 12:49:43 來(lái)源:網(wǎng)絡(luò) 閱讀:831 作者:神ge 欄目:編程語(yǔ)言

c語(yǔ)言中文件的結(jié)尾指的是文件的最后一個(gè)字符的下一個(gè)字符

例如:文件a.txt中有三個(gè)字符abc,即文件大小為3

那么文件的實(shí)際內(nèi)容如下圖.

文件的結(jié)尾和文件開(kā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

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

a b c
AI