[问题]关于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