1.fread
原型:
_acrtimp size_t __cdecl fread(
_out_writes_bytes_(_elementsize * _elementcount) void* _buffer,
_in_ size_t _elementsize,
_in_ size_t _elementcount,
_inout_ file* _stream
);
fread()函式需要輸入四組資料:
elementsize:要讀的每個資料項的位元組數,可由sizeof計算
elementcount:讀取的資料項個數,每個資料項大小為elementsize個位元組
stream:檔案流
//位**件讀取
file *fileopen = fopen(filename, "rb"); //唯讀二進位制開啟檔案
if (fileopen == null)
else
//讀取檔案資料
fread(&bmpfileheader, sizeof(bitmapfileheader), 1, fileopen);
fread(&bmpinfoheader, sizeof(bitmapinfoheader), 1, fileopen);
2.fopen
原型:
_acrtimp file* __cdecl fopen(
_in_z_ char const* _filename,
_in_z_ char const* _mode
);
檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟時黑白則返回null並把錯誤**存在errno中。
一般而言在fopen()後
時註明檔名稱及字尾。
fopen()開啟檔案的方式,首先明確:
r:read
w:write
+:讀和寫
常用的mode有一下幾種形態:(百科)
r 以 唯讀方式開啟檔案,該檔案必須存在。
r+ 以可讀寫方式開啟檔案,該檔案必須存在。
rb+ 讀寫開啟乙個
二進位制檔案,允許讀寫資料,檔案必須存在。
w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。
w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(
eof符保留)
a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。 (原來的eof符不保留)
wb 只寫開啟或新建乙個
二進位制檔案;只允許寫資料。
wb+ 讀寫開啟或建立乙個二進位制檔案,允許讀和寫。
ab+ 讀寫開啟乙個二進位制檔案,允許讀或在檔案末追加資料。
wx 建立文字檔案,只允許寫入資料.[c11]
wbx 建立乙個二進位制檔案,只允許寫入資料.[c11]
w+x 建立乙個文字檔案,允許讀寫.[c11]
wb+x 建立乙個二進位制檔案,允許讀寫.[c11]
w+bx 和"wb+x"相同[c11]
以x結尾的模式為獨佔模式,檔案已存在或者無法建立(一般是路徑不正確)都會導致fopen失敗.檔案以作業系統支援的獨佔模式開啟.[c11]
二進位制和文字模式的區別
1.在windows系統中,文字模式下,檔案以"\r\n"代表換行。若以文字模式開啟檔案,並用fputs等函式寫入換行符"\n"時,函式會自動在"\n"前面加上"\r"。即實際寫入檔案的是"\r\n" 。
2.在類unix/linux系統中文字模式下,檔案以"\n"代表換行。所以linux系統中在文字模式和二進位制模式下並無區別。
C C 基礎知識 標頭檔案管理
有乙個簡單的規則是 在同乙個檔案中,只能將乙個標頭檔案包含一次。但是,在某些情況下,可能會出現將某個標頭檔案包含兩次的情況,比如可能使用了包含了另乙個標頭檔案的標頭檔案。預處理器編譯指令可以防止這種情況的出現 ifndef xx.h ifndef xx h define xx h place inc...
c c 記憶體管理
我一直覺得記憶體是很複雜的東西.也許我把這篇文章完成的時候,我會了解一點c 的記憶體管理機制 從硬體開始 記憶體器位址空間 匯流排位址空間 cpu位址空間 虛擬記憶體位址空間 程式位址空間 邏輯位址空間 程式位址空間對c 程式設計師來說是可見的,其他位址空間我們並不關心 通過列印pointer的值 ...
C C 記憶體管理
寫乙個好的c 程式,我們要懂得好多東西,比如說最基本的物件導向程式設計思想,c 的封裝 繼承 多型機制,設計模式等,還有乙個很重要的內容便是效能優化,像c c 這種接近底層的語言,追求的就是效能,與之相關的一項內容便是記憶體管理,記憶體分配要合理,禁止破壞記憶體,不能有記憶體洩漏,操作不好的話,程式...