C語言fwrite和fprintf函式

2021-09-16 12:08:14 字數 992 閱讀 9839

c語言把檔案看作乙個字元(位元組)的序列,即由乙個乙個字元(位元組)的資料順序組成。根據資料的組織形式,可分為ascii檔案和二進位制檔案。ascii檔案又稱為文字(text)檔案,它的每個位元組放乙個ascii**,代表乙個字元。二進位制檔案是把記憶體中的資料按其在記憶體中的儲存形式原樣輸出到磁碟上。

之前我一直以為如果寫二進位制檔案(用文字編輯器開啟是亂碼的那種)就用fwrite、寫文字檔案(文字編輯器開啟後肉眼可閱讀的)就用fprintf,網上很多資料也是這麼說的,乍一看就覺得是fwrite只能寫二進位制檔案而不能寫文字檔案(錯!!!!

今天看到一位同事寫的資料存.csv格式(可以通過excel開啟閱讀,當然也可以用普通文字編輯器開啟)的儲存介面,發現最後是以fwrite函式寫成文字檔案的,自己跑了一下**,發現竟然可以,隨後便查詢了更多的資料才知道:fwrite也可以寫文字檔案,最終檔案的情況由你的資料輸入源決定,比如:

int i = 10;

fwrite(p_data, sizeof(int), 1, fp); // fp為檔案指標

上面的例子寫入的就是二進位制結果,32位機器上寫入的就是10的二進位制序列,寫入的就是4個位元組

char *value = "10";	

fwrite(p_data, sizeof(value), 1, fp); // fp為檔案指標

而以上這樣寫入的就是3個位元組(含字串末尾的\0)

其實,如果資料量不大,完全可以直接使用fprintf函式實現文字的寫入,但是在資料量比較大且資料大的時候,用fwrite就可以節省不少儲存空間了,例如:

1,2,3 寫這個3個數,文字檔案佔據的大小就是3個位元組,而二進位制寫入(假設int)就是3*4=12位元組

12345, 23456, 34567 寫這3個數,文字檔案佔據的大小是15個位元組,而二進位制(假設int)還是3 *4=12位元組

... ... 以此類推

C語言 fwrite和fread函式的用法小結

fwrite和fread是以記錄為單位的i o函式,fread和fwrite函式一般用於二進位制檔案的輸入輸出。cpp view plain copy include size t fread void ptr,size t size,size t nmemb,file stream size t ...

C語言 fwrite和fread的使用(1)

include include include struct student int main1 int ret fwrite s1,sizeof student 4,fp int ret fwrite s1,4,sizeof student,fp s1,需要往檔案寫內容的變數首位址 15,往檔案寫...

C語言fwrite函式了解

fwrite 函式 write data to a stream 原型 size t fwrite const void buffer,size t size,size t count,file stream 注意 這個函式以二進位制形式對檔案進行操作,不侷限於文字檔案 demo cpp view ...