日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fread、fwrite、fopen函数的简单使用和open、read、write区别解析

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fread、fwrite、fopen函数的简单使用和open、read、write区别解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這幾個函數(shù)的區(qū)別:fread、fwrite、fopen和open、read、write區(qū)別解析

標(biāo)準(zhǔn)C庫函數(shù)的簡單使用

fopen函數(shù)原型:

#include <stdio.h> FILE *fopen(const char *pathname, const char *mode);第一個參數(shù)是:要打開的文件路徑 第二個參數(shù)是:以什么權(quán)限打開 文件順利打開后,指向該流的 文件指針(FILE*) 就會被返回。如果文件打開失敗則返回NULL,并把錯誤代碼存在errno 中。 mode打開模式(注意雙引號): “r” 以只讀方式打開文件,該文件必須存在。“r+” 以可讀寫方式打開文件,該文件必須存在。”rb+“ 讀寫打開一個 二進(jìn)制文件,允許讀寫數(shù)據(jù)(可以任意修改),文件必須存在。“w” 打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在則建立該文件。“w+” 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在則建立該文件。“a” 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留。( EOF符保留)”a+“ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留。 (原來的EOF符不保留)“wb” 只寫打開或新建一個 二進(jìn)制文件;只允許寫數(shù)據(jù)(若文件存在則文件長度清為零,即該文件內(nèi)容會消失)“wb+” 讀寫打開或建立一個二進(jìn)制文件,允許讀和寫(若文件存在則文件長度清為零,即該文件內(nèi)容會消失)

fwrite函數(shù):

#include <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);ptr:是一個指向用于保存數(shù)據(jù)的內(nèi)存位置的指針(是一個指針,對于fwrite來說,是要獲取數(shù)據(jù)的地址) size: 是每次讀取的字節(jié)數(shù) nmemb: 是讀取的次數(shù) stream: 是數(shù)據(jù)寫入的流(目標(biāo)指針的文件) 返回值: 成功,該函數(shù)返回一個 size_t 對象,表示元素的總數(shù)(其實就是nmemb),該對象是一個整型數(shù)據(jù)類型。如果該數(shù)字與 nmemb 參數(shù)不同,則會顯示一個錯誤。 失敗:返回0 是實際寫入的元素(并非字節(jié))數(shù)目 ps:如果輸入過程中遇到了文件尾或者輸出過程中出現(xiàn)了失誤,這個數(shù)字可能比請求的元素數(shù)目要小

fread函數(shù):

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);buffer: 是讀取的數(shù)據(jù)存放的內(nèi)存的指針,(可以是數(shù)組,也可以是新開辟的空間)ps: 是一個指向用于保存數(shù)據(jù)的內(nèi)存位置的指針(為指向緩沖區(qū)保存或讀取的數(shù)據(jù)或者是用于接收數(shù)據(jù)的內(nèi)存地址) size: 是每次讀取的字節(jié)數(shù) nmemb: 是讀取的次數(shù) stream: 是要讀取的文件的指針ps: 是數(shù)據(jù)讀取的流(輸入流)返回值: 成功:是實際讀取的元素(并非字節(jié))數(shù)目,當(dāng)目標(biāo)緩沖區(qū)是20字節(jié)時,而讀100次,返回的是實際讀到有字節(jié)的次數(shù)。 失敗:返回0 ps:如果輸入過程中遇到了文件尾或者輸出過程中出現(xiàn)了錯誤,這個數(shù)字可能比請求的元素數(shù)目要小

fseek函數(shù):

int fseek( FILE *stream, long offset, int origin ); 第一個參數(shù)stream為文件指針 第二個參數(shù)offset為偏移量,整數(shù)表示正向偏移,負(fù)數(shù)表示負(fù)向偏移 第三個參數(shù)origin設(shè)定從文件的哪里開始偏移,可能取值為:SEEK_CURSEEK_ENDSEEK_SET SEEK_SET: 文件開頭 SEEK_CUR: 當(dāng)前位置 SEEK_END: 文件結(jié)尾 其中SEEK_SET,SEEK_CURSEEK_END和依次為012. 返回值:成功返回0,失敗返回非0.

代碼的綜合:

#include<stdio.h> #include<string.h> #include<stdlib.h> int main() {FILE *fp;//定義文件指針char* buf="ffffff";char* readbuf=NULL;readbuf=(char*)malloc(strlen(buf));int n_write;int n_read;fp=fopen("./filetest","w+");if(fp==NULL){printf("文件打開失敗\n");perror("fopen");exit(0);}n_write=fwrite(buf,sizeof(char),strlen(buf),fp);if(n_write==0){printf("寫入失敗\n");perror("fwrite");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("讀取失敗\n");perror("fread");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("讀取失敗\n");perror("fread");exit(0);}printf("寫入:%d個,讀出:%d個,內(nèi)容為:%s\n",n_write,n_read,readbuf);fclose(fp);return 0; }

fputc、fputs、feof、fgetc、fgets函數(shù):

int fputc(int c, FILE *stream); 參數(shù):c:字符fp:文件指針 返回值:成功:返回寫入的字符失敗:返回EOF int fputs(const char *s, FILE *stream); 參數(shù):s:字符串fp:文件指針 返回值:成功:返回非負(fù)數(shù)失敗:返回EOFfgetc函數(shù)原型:int fgetc(FILE *stream);從文件fp中讀入一個字節(jié),指針自動后移為什么fgetc返回的是int而不是char? 通過man fgetc查看其返回值:fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. 返回時,unchar型會被轉(zhuǎn)換為int,因為讀到文件尾時需要返回的是EOF-1, 如果為char型,-10XFF相等,會發(fā)生沖突 返回值: 若成功,則返回讀取的“字節(jié)”,同于fputc函數(shù)的 ch,到達(dá)文件尾,返回EOF結(jié)束函數(shù)原型char * fgets(char *str,int n,FILE *fp)從文件中每次讀入一行。 str是存放將要讀入字符型數(shù)據(jù)的存放地址 n是數(shù)目變量 fp是文件指針 該函數(shù)表明從文件fp中讀入n-1個字符放在以str為起始地址的空間 因為系統(tǒng)會在最后加上一個‘\0’。讀入過程中: 若該行字符數(shù)不超過n-2(2代表該行本身的換行符‘\n’和系統(tǒng)自動加上的'\0') 則函數(shù)讀完該行就結(jié)束,文件指針移動到下一行,再進(jìn)行文件讀入操作時,從下一行開始讀入。若該行字符數(shù)目總數(shù)(不包含換行符)大于n-2,則只讀入n-1個字符(1代表系統(tǒng)自己加上的'\0') 文件指針自動移動到下一個字符處,再進(jìn)行文件讀入操作時,順序讀入該行剩下的字符。返回值: 文件讀入成功則返回str,失敗或者讀到文件尾則返回null。feof 函數(shù)原型:int feof(FILE *stream); feof()是檢測流上的文件結(jié)束符的函數(shù),如果文件結(jié)束,則返回非0值,否則返回0

大佬博客:fgets 函數(shù)用法

總結(jié)

以上是生活随笔為你收集整理的fread、fwrite、fopen函数的简单使用和open、read、write区别解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。