作者CannyRowFour (知道還問)
看板C_and_CPP
標題關於fwrite之函式使用疑問
時間Wed Dec 13 12:25:44 2017
開發平台(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