我制作这个简单的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;
}
答案 0 :(得分:3)
允许并且定义良好的行为可以在文件末尾之外进行搜索。
这就是为什么fseek()
没有设置文件结束指示符的原因,它甚至会在成功时取消它。
来自C Standard:
5确定新位置后,成功调用fseek函数[...]清除流的文件结束指示符,然后建立新位置。