我需要一个具有只读权限的二进制文件来理解代码片段的输出,但我不知道如何创建二进制文件所以我试图在纸上模拟它,但我一点也不明白部分。这是代码:
FILE *fp;
char buf[256];
fp=fopen("test.dat", "rb");
fread(buf, 5, 4, fp);
fseek(fp, -5L, SEEK_CUR);
printf("%d", ftell (fp));
-5L 是什么意思?我知道 fseek 上的“-value”意味着指针将在 SEEK_CUR(当前位置)之前移动“值”位置,但我不知道 -5L 等于什么。
最佳答案
fseek(fp, -5L, SEEK_CUR);
指示文件位置向后移动 5,如果可能的话。
L
确保十进制常量 至少是long
的宽度。
fseek()
需要一个 long
类型的偏移量。
int fseek(FILE *stream, long int offset, int whence);
这里不需要 -5L
中的 L,但也没有坏处。
注意:ftell()
返回一个long
,因此使用"%ld"
将打印说明符与参数类型相匹配。同时启用所有编译器警告。
// printf("%d", ftell (fp));
printf("%ld", ftell (fp));
关于c - 我不明白 fseek 参数的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166481/