C語言中fgetc()、fgets()之間的區別

在學習文件那一快關於讀寫文件中的字符讓我折騰了一陣子,總是把這幾個函數混淆,今天有時間就整理下,並分享下個人的心得,希望對大家有幫助。

1.fgetc() 和 fgets() 之間的區別

fgetc 是 file get char 的縮寫,意思是從指定的文件中讀取一個字符。

fgetc() 的用法爲:int fgetc (FILE *fp);

fp 爲文件指針。fgetc() 讀取成功時返回讀取到的字符,讀取到文件末尾或讀取失敗時返回EOF

EOF 是 end of file 的縮寫,表示文件末尾,是在 stdio.h 中定義的宏,它的值是一個負數,往往是 -1。fgetc() 的返回值類型之所以爲 int,就是爲了容納這個負數(char不能是負數)。

下面舉個例子說明下他的使用

char ch;
FILE *fp = fopen("D:\\demo.txt", "r+");
ch = fgetc(fp);

表示從D:\\demo.txt文件中讀取一個字符,並保存到變量 ch 中。

如果要完成的讀寫D:\\demo.txt的數據該怎麼寫呢,如下所示

#include<stdio.h>
int main(){
    FILE *fp;
    char ch;
   
    //如果文件不存在,給出提示並退出
    if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){
        puts("Fail to open file!");
        exit(0);
    }
    //每次讀取一個字節,直到讀取完畢
    while( (ch=fgetc(fp)) != EOF ){
        putchar(ch);
    }
    putchar('\n');  //輸出換行符
    fclose(fp);
    return 0;
}

fgets() 函數用來從指定的文件中讀取一個字符串,並保存到字符數組中。

fgets()用法爲: char *fgets ( char *str, int n, FILE *fp );

str 爲字符數組,n 爲要讀取的字符數目,fp 爲文件指針

返回值:讀取成功時返回字符數組首地址,也即 str;讀取失敗時返回 NULL;如果開始讀取時文件內部指針已經指向了文件末尾,那麼將讀取不到任何字符,也返回 NULL。

同樣的我們也舉個例子來說明fgets()的使用

#define N 101
char str[N];
FILE *fp = fopen("D:\\demo.txt", "r");
fgets(str, N, fp);

表示從 D:\\demo.txt 中讀取 100 個字符,並保存到字符數組 str 中。

如果我們要讀取 D:\\demo.txt 那該怎麼使用fgets()函數呢

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(){
    FILE *fp;
    char str[N+1];
    if( (fp=fopen("d:\\demo.txt","rt")) == NULL ){
        puts("Fail to open file!");
        exit(0);
    }
   
    while(fgets(str, N, fp) != NULL){
        printf("%s", str);
    }
    fclose(fp);
    return 0;
}

因爲fgets()是整行的讀取所以運行結果如下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章