最近在練習c語言的檔案寫入,今天想寫乙個錄入學生個人資訊的程式。
我想通過建立學生結構體,然後將所有學生的個人資訊錄入。
**如下:
想要同時錄入四個同學的資訊,然後通過fwrite()函式寫入檔案中。
但是出現了下面的錯誤
出現了亂碼。然後我查詢了fwrite函式,發現他是以位元組讀入到文字中的。並且txt文件不會區別資料型別,完全按照char的方式來識別。
size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);
返回值:返回實際寫入的資料塊數目
(1)buffer:是乙個指標,對fwrite來說,是要獲取資料的位址;
(2)size:要寫入內容的單位元組數;
(3)count:要進行寫入size位元組的資料項的個數;
(4)stream:目標檔案指標;
(5)返回實際寫入的資料項個數count。
我每次以結構體起始位址作為輸入到磁碟的開始位置,然後按位元組把結構體所有資料寫入磁碟。由於整型是四個位元組,當我輸入比較小數字時,只有最後乙個位元組有資料,就解釋了中間為什麼那麼多空格。並且他會以ascll碼的形式顯示出來。
所以要想不出現亂碼,在使用fwrite()函式時,資料一定要是char型。
fwrite的檔案緩衝同步到磁碟
這是個小細節。用fwrite寫檔案的時候,我發現重新整理資料夾,對應檔案大小一直是0。網上有一篇部落格寫得比較完善 c語言中的 標準io都有快取區,這和系統緩衝不同,我們使用fflush 只保證了將io緩衝寫入系統緩衝中,使io讀操作能成功,但系統什麼時候寫入磁碟,由系統決定,一般是達到一定量時系統...
fwrite寫入位元組數與實際不符,解決 重新整理緩衝區
遇到這樣乙個情況 以二進位制形式開啟檔案,迴圈中每次fwrite寫入固定位元組,但每次實際寫入位元組數與fwrite引數都不一樣,有多有少,但是!迴圈完後總的位元組數是一致的。於是開啟google搜尋,大多是說不以二進位制開啟的情況下會產生多餘位元組,自動新增 n等,顯然與我的情況不符。進一步搜尋,...
用systemtap分析磁碟寫入操作
輸出結果讓我有些意外 name do sync write pid 22542 uid 0 ino 324338 name sda1 filename sqlite lvkvyhyhutvo2ss journal name do sync write pid 22542 uid 0 ino 3243...