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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言fread和fwrite的用法详解

發布時間:2025/3/12 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言fread和fwrite的用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fgets() 有局限性,每次最多只能從文件中讀取一行內容,因為 fgets() 遇到換行符就結束讀取。如果希望讀取多行內容,需要使用 fread() 函數;相應地寫入函數為 fwrite()。

Windows 系統,使用 fread() 和 fwrite() 時應該以二進制的形式打開文件。

fread() 函數用來從指定文件中讀取塊數據。所謂塊數據,也就是若干個字節的數據,可以是一個字符,可以是一個字符串,可以是多行數據,并沒有什么限制。fread() 的原型為:

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );

fwrite() 函數用來向文件中寫入塊數據,它的原型為:

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );

對參數的說明:

ptr 為內存區塊的指針,它可以是數組、變量、結構體等。fread() 中的 ptr 用來存放讀取到的數據,fwrite() 中的 ptr 用來存放要寫入的數據。size:表示每個數據塊的字節數。count:表示要讀寫的數據塊的塊數。fp:表示文件指針。理論上,每次讀寫 size*count 個字節的數據。

size_t 是在 stdio.h 和 stdlib.h 頭文件中使用 typedef 定義的數據類型,表示無符號整數,也即非負數,常用來表示數量。

返回值:返回成功讀寫的塊數,也即 count。如果返回值小于 count:

對于 fwrite() 來說,肯定發生了寫入錯誤,可以用 ferror() 函數檢測。對于 fread() 來說,可能讀到了文件末尾,可能發生了錯誤,可以用 ferror() 或 feof() 檢測。

示例 從鍵盤輸入一個數組,將數組寫入文件再讀取出來。

#include<stdio.h> #define N 5 int main(){//從鍵盤輸入的數據放入a,從文件讀取的數據放入bint a[N], b[N];int i, size = sizeof(int);FILE *fp;if( (fp=fopen("D:\\demo.txt", "rb+")) == NULL ){ //以二進制方式打開puts("Fail to open file!");exit(0);}//從鍵盤輸入數據 并保存到數組afor(i=0; i<N; i++){scanf("%d", &a[i]);}//將數組a的內容寫入到文件fwrite(a, size, N, fp);//將文件中的位置指針重新定位到文件開頭rewind(fp);//從文件讀取內容并保存到數組bfread(b, size, N, fp);//在屏幕上顯示數組b的內容for(i=0; i<N; i++){printf("%d ", b[i]);}printf("\n");fclose(fp);return 0; }

運行結果:

23 409 500 100 22223 409 500 100 222

打開 D:\demo.txt,發現文件內容根本無法閱讀。這是因為我們使用"rb+"方式打開文件,數組會原封不動地以二進制形式寫入文件,無法閱讀。

數據寫入完畢后,位置指針在文件的末尾,要想讀取數據,必須將文件指針移動到文件開頭,這就是rewind(fp);的作用。

文件的后綴不一定是 .txt,它可以是任意的,你可以自己命名,例如 demo.ddd、demo.doc、demo.diy 等。
示例 從鍵盤輸入兩個學生數據,寫入一個文件中,再讀出這兩個學生的數據顯示在屏幕上。

#include<stdio.h>#define N 2struct stu{char name[10]; //姓名int num; //學號int age; //年齡float score; //成績 }boya[N], boyb[N], *pa, *pb;int main(){FILE *fp;int i;pa = boya;pb = boyb;if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){puts("Fail to open file!");exit(0);}//從鍵盤輸入數據printf("Input data:\n");for(i=0; i<N; i++,pa++){scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);}//將數組 boya 的數據寫入文件fwrite(boya, sizeof(struct stu), N, fp);//將文件指針重置到文件開頭rewind(fp);//從文件讀取數據并保存到數據 boybfread(boyb, sizeof(struct stu), N, fp);//輸出數組 boyb 中的數據for(i=0; i<N; i++,pb++){printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);}fclose(fp);return 0; }

運行結果:

Input data: Wang 15 90.5↙ Hua 1 14 99↙ Wang 2 15 90.500000 Hua 1 14 99.000000

總結

以上是生活随笔為你收集整理的C语言fread和fwrite的用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。