我无法理解fseek参数的作用

时间:2017-02-10 18:41:47

标签: c

我需要一个具有只读权限的二进制文件来理解代码片段的输出,但我不知道如何创建二进制文件,所以我试图在纸上模拟它,但我不知道'了解一小部分。这是代码:

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等于什么。

2 个答案:

答案 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));