我需要一个具有只读权限的二进制文件来理解代码片段的输出,但我不知道如何创建二进制文件,所以我试图在纸上模拟它,但我不知道'了解一小部分。这是代码:
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是什么意思?我知道" -value"在fseek意味着指针将移动"值"在SEEK_CUR(当前位置)之前的位置,但我不知道-5L等于什么。
答案 0 :(得分:1)
-5表示从当前(SEEK_CUR)向向后移动 5个位置。 " L"只是一个数字修饰符,表示-5是 long 值。
答案 1 :(得分:1)
如果可能,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));