我在C语言中读取二进制文件时遇到了以下问题。
我已经读取了二进制文件的前8个字节。现在我需要从第9个字节开始读取。以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
然而,当我打印存储检索到的值的数组内容时,仍然显示给我前8个字节,这不是我需要的。请问有人能帮忙解决吗?
我在C语言中读取二进制文件时遇到了以下问题。
我已经读取了二进制文件的前8个字节。现在我需要从第9个字节开始读取。以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
假设:
FILE* file = fopen(FILENAME, "rb");
char buf[8];
你可以先读取前8个字节然后再读取接下来的8个字节:
/* Read first 8 bytes */
fread(buf, 1, 8, file);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
使用fseek
跳过前8个字节,然后读取接下来的8个字节(如果将文件中的第一个字节视为0,则包括第8至15个字节):
/* Skip first 8 bytes */
fseek(file, 8, SEEK_SET);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
理解这一点的关键是C库函数会自动为您保留文件中的当前位置。当fread
执行读取操作时,它会移动当前位置,因此下一个fread
将从上一个读取操作结束的位置开始。而fseek
仅仅是移动当前位置而不进行读取。
P.S.: 由于您的问题要求读取字节,因此我的代码在fread
的第二个参数中提供了大小1。
fseek
函数只是移动文件流中的位置指针。一旦你移动了位置指针,你需要调用fread
函数来实际读取文件中的字节。
然而,如果你使用fread
函数已经读取了文件中的前八个字节,则位置指针将指向第九个字节(假设没有发生错误并且文件至少有九个字节长)。当你调用fread
函数时,它会将位置指针向前移动读取的字节数。你不需要调用fseek
函数来移动指针。
SEEK_CUR
而不是SEEK_SET
,这告诉fseek
使用相对于当前位置的偏移量,而不是文件开头。 - Cascabel
fread(buf, 1, 8, file);fseek(file, 8, SEEK_CUR);fread(buf, 1, 8, file);
。 说明:以上内容是关于文件操作的,建议在读写文件时使用SEEK_CUR以实现读取特定位置的数据。 - ihadanny