Fseek不会在C中设置流的文件位置

时间:2016-04-30 16:23:49

标签: c fseek

我制作这个简单的C程序,其目的是计算通过第二个命令行参数给出的文本文件中的字符。  我面临的问题是fseek显示没有响应结果在函数“Counter”中有一个无限循环(而(!feof(fp)))。用fgetc替换fsec,程序运行正常。我的问题是fseek出了什么问题。 提前谢谢。

#include <stdio.h>

int Counter (FILE * fp);

int main(int argc, char* argv[])
{
   int cntr;
   FILE * fpc;
   fpc = fopen(argv[1],"r");
   cntr = Counter(fpc);
   fclose(fpc);
   printf("%i\n",cntr);
}

int Counter (FILE * fp)
{
    int cntr = 0;
    while (!feof(fp))
    {
        cntr++;
        fseek(fp,1,1);
    }
    return cntr;
}

1 个答案:

答案 0 :(得分:3)

允许并且定义良好的行为可以在文件末尾之外进行搜索。

这就是为什么fseek()没有设置文件结束指示符的原因,它甚至会在成功时取消它。

来自C Standard

  

5确定新位置后,成功调用fseek函数[...]清除流的文件结束指示符,然后建立新位置。