fread / fwrite大小和计数

我怀疑用于fread / fwrite的参数大小和计数的顺序。 如果我想从文件fp中读取8kb数据,以下哪项更有效?

fread(data,1,8192,fp) fread(data,8192,1,fp) 

还有我应该担心的endiannes问题吗?

它们完全相同。 至于字节序,它取决于你正在阅读什么。 通常情况下,它将是一个字节缓冲区,根据它们的格式,您必须“取消格式化”。 由于它是字节,因此字节顺序不起作用。

编辑:

正如simonc指出的那样(然后删除,因为他没有100%正确 – 但他的观点是有效的):关于返回值(你需要使用它以了解是否有效)function是否有效)。 fread( buffer, 8192, 1, fp )将返回0或1,并且只有在读取了所有8192个字节时才返回1。 此外,Posix说没有为部分读取的对象指定缓冲区的内容。 在实践中,缓冲区将填充尽可能多的字节,但由于你不知道有多少字节,这对你来说并不多。 总之,你应该总是使用fread( buffer, 1, 8192, fp ); (因为将此函数用于除字节缓冲区之外的任何内容都没有意义)。

它们并不完全等同。

fread()设计错误。 它的设计忽略了文件末尾部分读取的可能性,它不能用其返回值表示,返回值以您指定的大小为单位。

你应该只使用大小为1的fread() ,长度是你期望的字节数。 这是你能够妥善处理这种情况的唯一方法。 对于char以外的类型,这意味着将sizeof char作为大小,将n*sizeof T作为长度,其中n是您期望的T s的数量。