回覆列表
-
1 # 方圓九洲V
-
2 # 髒話比謊話乾淨558
fwrite是向流中寫入數據,而fprintf是向流中寫入格式數據。兩者的共同點為向流中寫入數據,至於區別可以看看兩者的申明:
size_tfwrite(
constvoid*buffer,
size_tsize,
size_tcount,
file*stream
);
intfprintf(
file*stream,
constchar*format[,
argument]...
);
前者fwrite寫入流stream中的數據是buffer指定的內容,內容的字節大小分別由size和count兩個參數來指定,因此寫入流stream中的內容有可能是亂碼,但是有效的數據。
後者fprintf寫入流stream中的數據則由argument來指定,並且這些argument的內容分別由format指定的格式來顯示,因此寫入stream的內容通常來說是文本字符流,當然,也允許寫入格式亂碼。
兩者都可以將文本寫入流stream中。比如:
fwrite("helloworld!",1,12,fp);
與
fprintf(fp,"%s","helloworld!");
等價。
fprintf(fp, "%d", buffer); 是將格式化的數據寫入文件
fprintf(文件指針,格式字符串,輸出表列);
fwrite(&buffer, sizeof(int), 1, fp);是以二進位方式寫入文件
fwrite(數據,數據類型大小(字節數),寫入數據的最大數量,文件指針);
由於fprintf寫入時,對於整數來說,一位佔一個字節,比如1,佔1個字節;10,佔2個字節;100,佔3個字節,10000,佔5個字節
所以文件的大小會隨數據的大小而改變,對大數據空間占用很大。
而fwrite是按二進制寫入,所以寫入數據所佔空間是根據數據類型來確定,比如int的大小為4個字節(一般32位下),那麼整數10所佔空間為4個字節,100、10000所佔空間也是4個字節。所以二進制寫入比格式化寫入更省空間。