看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Windows Ubuntu 皆有使用 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Windows 使用 Visual Studio C++ Ubuntu 使用 eclipse 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 關於fwrite函式,小弟也到MSDN找了此函式的定義如下: size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream) 其中 size定義為每個項目的Byte大小,而count則是多少個寫入項目。 欲將一組名稱為output,個數為100長度的float向量存為一.dat之二進位檔, 依照定義應該為: fwrite(output, sizeof(float), 100, 開啟檔案之指標) 但由學長先前的範例發現,如果將2,3的參數位置對調,仍然能夠順利將資料存起來,如 下: fwrite(output, 100, sizeof(float), 開啟檔案之指標) 並且儲存後的檔案利用Matlab驗證是正確的 想請教各位前輩,是不是小弟搞錯什麼,還是有什麼觀念不清楚的地方,想請各位指正。 手機排版,可能不易閱讀,還請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.160.91 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1513139146.A.494.html
james732: 因為它是把buffer的size*count寫進檔案裡吧?12/13 12:44
CannyRowFour: james大是指寫入檔案會有不一樣的寫法嗎? 12/13 12:49
Lipraxde: 你count不要用4的倍數看看啊12/13 13:13
yvb: 檢查 fwrite 的回傳值看看.12/13 13:32
※ 編輯: CannyRowFour (42.77.12.255), 12/13/2017 14:04:01
CannyRowFour: 謝謝L大與y大建議,等等回去試試看 12/13 14:08
steve1012: 可以正確寫是因為implementation 通常會用size*count 12/13 14:59
steve1012: 但是回傳值不同 12/13 14:59
steve1012: 試了一下 你直接google "fwrite size count" 第一個搜 12/13 15:00
steve1012: 尋結果就有講了 還有放FreeBSD 的implementation. 以後 12/13 15:00
steve1012: 先查一下可能更快拿到答案喔 12/13 15:00
CannyRowFour: 謝謝steve大的幫忙,非常感謝你的解說 12/13 15:14
stupid0319: 那是寫在硬碟上沒什麼差別,如果某個裝置一次只能寫8個 12/13 16:15
stupid0319: 那不就爆炸了 12/13 16:15
CannyRowFour: 原來也有這樣的概念,謝謝stupid大的解說 12/13 17:42