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

时间:2017-02-28 17:58:24

标签: c file text fseek

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="links">
    <a href="#section1">Section 1</a>
    <a href="#section2">Section 2</a>
    <a href="http://google.com" target="_blank">External Link</a>
    <a href="#section3">Section 3</a>
    <a href="#section4">Section 4</a>
</div>
<div id="section1" class="section"></div>
<div id="section2" class="section"></div>
<div id="section3" class="section"></div>
<div id="section4" class="section"></div>

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

#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));

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

当你调用fgetc时,offset比你预期的要快1,所以你需要移回2来获得你期望获得的char。否则你会一直得到同样的字符。