2017-02-10 114 views
0

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

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

+0

[fseek'documentation帮助](http://en.cppreference.com/w/c/io/fseek)? – WhozCraig

+0

'ftell()'返回一个'long'。使用'printf(“%ld”,ftell(fp));'并启用所有编译器警告。 – chux

+0

对于** - 5L **请参阅[此问题](http://stackoverflow.com/q/17332477/2800918) – CAB

回答

0

-5表示它向后移动从当前位置(SEEK_CUR)获得5个位置。 “L”只是一个数字修饰符,可以说-5是一个长的值值。

1

fseek(fp, -5L, SEEK_CUR);指示文件位置移回5,如果可能的话。

L确保十进制常数至少为long的宽度。

fseek()预计类型为long的偏移量。

int fseek(FILE *stream, long int offset, int whence); 

此处不需要L -5L,但也没有害处。


注:ftell()返回long,所以使用"%ld"以匹配参数类型的打印符。还启用所有编译器警告。

// printf("%d", ftell (fp)); 
printf("%ld", ftell (fp));