c - fread 读取的安全最大记录数

标签 c mingw fread

我正在使用 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/

相关文章:

c++ - 无法在 NetBeans 7.0 上编译 C++ 代码

c++ - 将无符号字符写入和读取二进制文件

C - 自定义类型中的默认值

从 LibreOffice Basic 调用 C 共享库函数

c - 使用ld链接时, undefined reference '__main'

c++ - 为什么我必须按两次 Enter 才能使用 Netbeans 7.3.1 和最新的 MinGW 工具集执行 cin 语句?

PHP 文件处理和 fread 错误

c - fwrite 段错误 - 大小为 4 的无效读取

c - IPC msgrcv - 只接收两种特定类型的消息

在不使用标准库例程的情况下在日期/时间和时间戳之间进行转换