C - feof和fseek替换/等效代码?

时间:2014-04-30 06:58:40

标签: c fseek feof

我一直在我的代码中使用上述功能,现在发现我们不被允许。 也许有人可以帮助实现替代功能? 我只允许使用 与fgets,龟etc,的fputc,fprintf中,sprintf的,的fscanf,sscanf的,倒带,STDIN,STDOUT ....

关于fseek我有一个关于获取字符的一般想法,我需要跳过内部字符串 这是正确的想法吗?

如果有人可以提供帮助,我会很高兴。 非常感谢!

2 个答案:

答案 0 :(得分:1)

显然你只能从stdin读取,这不支持搜索,但支持文件结束。

  • 要跳过字符,您只需使用fread将它们读入缓冲区,然后忽略缓冲区中的结果。
  • 要检测文件结尾,请检查fread的返回值。如果fread返回0,则无需读取任何内容(或发生错误)。

答案 1 :(得分:1)

我认为这些功能是由于某些分配限制而不是技术而被禁止的?这取决于你想做什么:

  • feof()用于确定流是否位于文件末尾
  • fseek()用于移动到该文件中的特定位置。

您可以在读取时确定流是否位于文件末尾。例如,来自fscanf的手册页:

  

如果在发生任何转换(例如文件结束)之前发生输入失败,则返回值EOF

要在不使用fseek()的情况下在文件中移动,您可以使用允许列表中的rewind()。 来自rewind()的手册页:

  

rewind()函数将stream指向的流的文件位置指示符设置为文件的开头。它相当于:

       (void)fseek(stream, 0L, SEEK_SET)

从那里开始,您必须阅读seek()之前想要的内容。