我正在使用 fread 从文件中读取大量图像数据 (> 1 MB)。我最近在使用 Windows 网络共享的 MinGW 上遇到了一个错误,其中单个调用 fread like
fread(file, 4, 100000, data);
可靠地失败并出现“无效参数”错误,但是调用了 10 次
fread(file, 4, 10000, data); data += 10000;
成功并产生正确的结果。我推断必须有一个 fread 的最大大小,这是我以前不知道的。我将 fread 的允许大小一分为二,发现它在 31000 到 32000 个 4 字节 block 之间。有没有人遇到过这个?这是 MinGW 中的错误吗?有没有办法确定 fread 的最大“安全”大小?
最佳答案
这是 MSVCRT(mingw 使用的 Microsoft Visual C 运行时)中的一个已知错误,fread
(可能还有底层的 _read
或其他...?)失败在中等长度的读取长度上。您可以将读取分解成更小的部分,编写您自己的 fread
版本来替换系统版本(但只有在损坏的系统上编译时才这样做!),或者切换到更好的运行时环境(像 cygwin) 并没有充满错误...
关于c - fread 读取的安全最大记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241168/