fread读取的安全最大记录数

时间:2011-08-30 09:29:11

标签: c mingw fread

我正在使用fread从文件中读取大量图像数据(> 1 MB)。我最近在使用Windows网络共享的MinGW上遇到了一个错误,其中一次调用就像

一样
fread(file, 4, 100000, data);

错误地使用“无效参数”错误,但是10次调用

fread(file, 4, 10000, data); data += 10000;

成功并产生正确的结果。我推断,必须有一个最大尺寸的fread,我以前没有意识到。我将允许的fread大小分成两半,发现它在31000到32000个4字节的块之间。有没有人遇到过这个?这是MinGW中的错误吗?有没有办法确定fread的最大“安全”大小?

2 个答案:

答案 0 :(得分:7)

这是MSVCRT(mingw使用的Microsoft Visual C运行时)中的一个已知错误fread(也许还有潜在的_read或其他......?)在适度长的读取长度上失败。您可以将读取内容分解为更小的部分,编写自己的fread版本来替换系统版本(但只能在破坏的系统上进行编译时执行此操作!),或切换到更好的运行时环境(如cygwin)那不是虫子......

答案 1 :(得分:1)

fread()除非发生读取错误或文件结束,否则不应返回短项目计数。这听起来像是你链接的C库中的一个错误(默认情况下MinGW链接不是微软的C库吗?)。