fread/fwrite大小和计数

dan*_*nny 5 c c++ file endianness

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

fread(data,1,8192,fp)
fread(data,8192,1,fp)
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*nze 11

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

编辑:

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

  • @fvdalcin他在读字节.字节没有字节顺序.一旦他阅读了它们,他就必须根据文件格式的规范来解释它们.这通常应该在不考虑字节序的情况下完成. (4认同)