fread函式和fwrite函式

2021-06-09 13:11:18 字數 2366 閱讀 4240

1.函式功能

用來讀寫乙個資料塊。

2.一般呼叫形式

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

3.說明

(1)buffer:是乙個指標,對fread來說,它是讀入資料的存放位址。對fwrite來說,是要輸出資料的位址。

(2)size:要讀寫的位元組數;

(3)count:要進行讀寫多少個size位元組的資料項;

(4)fp:檔案型指標。

注意:1 完成次寫操(fwrite())作後必須關閉流(fclose());

2 完成一次讀操作(fread())後,如果沒有關閉流(fclose()),則指標(file * fp)自動向後移動前一次讀寫的長度,不關閉流繼續下一次讀操作則接著上次的輸出繼續輸出; 3

fprintf() : 按格式輸入到流,其原型是int fprintf(file *stream, const char *format[, argument, ...]);其用法和printf()相同,不過不是寫到控制台,而是寫到流罷了。注意的是返回值為此次操作寫入到檔案的位元組數。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10位元組;str2: 10位元組;a:2位元組;b:8位元組,c為33,因為寫入時不同的資料間自動加入乙個空格。

在c語言中進行檔案操作時,我們經常用到fread()和fwrite(),用它們來對檔案進行讀寫操作。下面詳細紹一下這兩個函式的用法。

我們在用c語言編寫程式時,一般使用標準檔案系統,即緩衝檔案系統。系統在記憶體中為每個正在讀寫的檔案開闢「檔案緩衝區」,在對檔案進行讀寫時資料都經過緩衝區。要對檔案進行讀寫,系統首先開闢一塊記憶體區來儲存檔案資訊,儲存這些資訊用的是乙個結構體,將這個結構體typedef為file型別。我們首先要定義乙個指向這個結構體的指標,當程式開啟乙個檔案時,我們獲得指向file結構的指標,通過這個指標,我們就可以對檔案進行操作。例如:

#i nclude

#i nclude

int main()

file *fp;

char buffer[100] = "this is a test";

if((fp = fopen("c:\\example.txt", "w")) == 0)

printf("open failed!");

exit(1);

fwrite(buffer, 1, strlen("this is a test"), fp);

fclose(fp);

return 0;

通過以上**,我們就在c盤的根目錄下建立了乙個名為example擴充套件名為.txt的檔案,我們開啟可以看到上面寫上了this is a test。當我們對它將它讀出時,用如下**:

#i nclude

#i nclude

int main()

file *fp;   int len;

char buffer[100];

/*memset(buffer, 1, 100); */

if((fp = fopen("c:\\example.txt", "r")) == 0)

printf("open failed!");

exit(1);

fseek(fp, 0l, seek_end);

len = ftell(fp);

rewind(fp);

fread(buffer, 1, len , fp);

printf("%s",buffer);

fclose(fp);

getch();

return 0;

可以看到,當我們使用memset了以後,讀出了一大堆亂碼,這是為什麼呢?原因是我們在fwrite函式時寫入的位元組數是用strlen求得的,也就是說字串最後的'\0'並沒有寫到檔案中去。所以我們從檔案中讀到buffer中時也自然沒有'\0',因為buffer中的數是隨機的,除非buffer中最後乙個字元的下乙個數恰好隨機到0(可能性很小,這裡用memset將它排除),否則以%s將buffer中的字元輸出時遇不到0,所以亂碼產生。解決的辦法有很多,你可以在向檔案寫資料時多寫入乙個位元組,系統會自動寫入0,fwrite(buffer, 1, strlen("this is a test")+1, fp);這樣讀出時最後就有乙個0了。或者讀出操作完成後,在最後乙個字元後面補上乙個0:buffer[len] = 0;這樣問題也可得到解決。

檔案操作之fread函式和fwrite函式

資料塊寫函式 fwritesize t fwrite const void restrict ptr,size t size,size t nitems,file restrict stream 資料塊寫函式 freadsize t fread void restrict ptr,size t si...

fread函式和fwrite函式

1.函式功能 用來讀寫乙個資料塊。2.一般呼叫形式 fread buffer,size,count,fp fwrite buffer,size,count,fp 3.說明 1 buffer 是乙個指標,對fread來說,它是讀入資料的存放位址。對fwrite來說,是要輸出資料的位址。2 size 要...

fread函式 fwrite函式

1.fread函式 函式原型 size t fread void buffer size t size size t count file stream 功 能 從乙個檔案流中讀資料,讀取count 個元素,每個元素 size 位元組.如果呼叫成功返回 count.如果呼叫成功則實際讀取 size ...