在學習文件那一快關於讀寫文件中的字符讓我折騰了一陣子,總是把這幾個函數混淆,今天有時間就整理下,並分享下個人的心得,希望對大家有幫助。
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()是整行的讀取所以運行結果如下