fseek()跨越文件限制而不是终止

时间:2017-04-26 15:44:14

标签: c fseek

在最后一个while循环中,应该打印存储在文件中的每第5个字符,但循环无限期地继续,而不是终止。 feof()函数应该在到达END OF FILE时返回1并且循环应该退出但是循环无限期地继续。

#include<stdio.h>

main() {
  long n, k;
  char c;
  FILE *fp;
  fp = fopen("RANDOM", "w");

  while ((c = getchar()) != EOF) {
    putc(c, fp);
  }

  n = ftell(fp);
  printf("\nNo. of characters entered by the user is : %ld\n", n);
  fclose(fp);
  fp = fopen("RANDOM", "r");

  while(feof(fp) == 0) {
    n = ftell(fp);
    c = getc(fp);
    printf("The character at %ld position is %c\n", n, c);
    fseek(fp, 4l, 1);
  }
}

1 个答案:

答案 0 :(得分:3)

来自man fseek()

  

成功调用@Override public void onViewRecycled(final RecyclerView.ViewHolder holder) { holder.toggle.setOnCheckedChangeListener(null); super.onViewRecycled(holder); } 函数会清除流的文件结束指示符。

即使您将位置指示器设置在EOF后面,fseek()也会成功。 因此,当fseek()是循环中的最后一个命令时,while (feof(fp) == 0)将永远不会终止。

相反,你可以这样做:

fseek()