c - 为什么在向后打印文本文件的程序中调用 fseek 时应使用偏移量 -2 而不是偏移量 -1?

标签 c file text fseek

以下 C 程序向后打印文本文件:

#include <stdio.h>
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
int main(int argc, char **argv)
{
    FILE *fp = f
   open(argv[1], "r");
   fseek(fp, -1L, SEEK_END);
   while (ftell(fp)) 
   {
      putchar(fgetc(fp));
       fseek(fp, -2L, SEEK_CUR);
   }

putchar(fgetc(fp));

由于程序应该向后打印文本文件,因此应该从末尾读取每个字符,而不跳过任何字符。如果是这样,我认为 while 循环内的调用应该是

fseek(fp, -1L, SEEK_CUR);

为什么偏移量是-2而不是-1?

提前致谢!

最佳答案

当您调用 fgetc 时,偏移量会比您期望的提前 1 个字符,因此您需要向后移动 2 个字符才能获得您期望获得的字符。否则你会一直得到相同的字符。

关于c - 为什么在向后打印文本文件的程序中调用 fseek 时应使用偏移量 -2 而不是偏移量 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515691/

相关文章:

linux - 避免碰撞,如果复制文件

c - 是否推荐使用 fseek() 计算文件大小的方法?

python - 基于另一列的字符串搜索,使用 Spark Dataframe 中的函数创建新列

css - 如何使 div 框的高度取决于其中有多少文本

c - C 中窗口中未出现的交互式输入

c - 文件压缩和代码

c - 如何在 Codeblocks 中构建我的代码?Codeblocks IDE 停止工作

c - 如何在C中声明参数

file - N :1 file descriptors?

flash - 嵌入字体并在 Flash 中正确显示的问题