c - 我不明白 fseek 参数的作用

标签 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 是什么意思?我知道 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/

相关文章:

c - 如何链接内核模块来使用它们的功能?

将字符串数组复制到另一个字符串数组 - C

从另一个函数调用 main

c - 使用 C 函数 fopen、fread 和 fwrite 与串行端口交互?

char数组到uint8类型指针的转换

c - 如何在 C++ 中将 2D 数组映射到 1D 数组中? (列主)

c - 增加在数组指针数组中实现的数组的最后一行?

c - C 函数中的段错误

c - 与GCC中的间接访问相比,为什么直接访问结构成员会产生更多的汇编代码?

c - 如何通过UART发送端口的多个数据?