fread 和fwrite 函式分析

2021-04-20 18:34:59 字數 1083 閱讀 6289

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

#i nclude

#i nclude

int main()

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()

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函式

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

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 ...