【发布时间】:2011-08-30 21:30:50
【问题描述】:
我试图一次读取一个 C 1 字节的二进制文件,在互联网上搜索了几个小时后,除了垃圾和/或段错误之外,我仍然无法检索任何内容。基本上,二进制文件的格式是一个有 256 个项目长的列表,每个项目是 1 个字节(0 到 255 之间的无符号整数)。我正在尝试使用 fseek 和 fread 跳转到二进制文件中的“索引”并检索该值。我目前拥有的代码:
unsigned int buffer;
int index = 3; // any index value
size_t indexOffset = 256 * index;
fseek(file, indexOffset, SEEK_SET);
fread(&buffer, 256, 1, file);
printf("%d\n", buffer);
现在这段代码给了我随机的垃圾号码和段错误。关于如何让它正常工作的任何提示?
【问题讨论】:
-
一次读取一个字节的文件会产生大量的 I/O 开销。更好的方法是将整个文件读入缓冲区(因为它只有 256 个字节)并单独处理存储在缓冲区中的每个字节。
-
@titaniumdecoy - 我相信 I/O 管理器会缓冲现代操作系统上的读取。