[問題]關於fwrite之函式使用疑問

作者: CannyRowFour (知道還問)   2017-12-13 12:25:44
開發平台(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驗證是正確的
想請教各位前輩,是不是小弟搞錯什麼,還是有什麼觀念不清楚的地方,想請各位指正。
手機排版,可能不易閱讀,還請見諒
作者: james732 (好人超)   2017-12-13 12:44:00
因為它是把buffer的size*count寫進檔案裡吧?
作者: CannyRowFour (知道還問)   2017-12-13 12:49:00
james大是指寫入檔案會有不一樣的寫法嗎?
作者: Lipraxde (Lipraxde)   2017-12-13 13:13:00
你count不要用4的倍數看看啊
作者: yvb   2017-12-13 13:32:00
檢查 fwrite 的回傳值看看.
作者: CannyRowFour (知道還問)   2017-12-13 14:08:00
謝謝L大與y大建議,等等回去試試看
作者: steve1012 (steve)   2017-12-13 14:59:00
可以正確寫是因為implementation 通常會用size*count但是回傳值不同試了一下 你直接google "fwrite size count" 第一個搜尋結果就有講了 還有放FreeBSD 的implementation. 以後先查一下可能更快拿到答案喔
作者: CannyRowFour (知道還問)   2017-12-13 15:14:00
謝謝steve大的幫忙,非常感謝你的解說
作者: stupid0319 (徵女友)   2017-12-13 16:15:00
那是寫在硬碟上沒什麼差別,如果某個裝置一次只能寫8個那不就爆炸了
作者: CannyRowFour (知道還問)   2017-12-13 17:42:00
原來也有這樣的概念,謝謝stupid大的解說

Links booklink

Contact Us: admin [ a t ] ucptt.com