有没有办法在使用fgets后移回一条线?

时间:2016-01-31 20:36:26

标签: c fgets

有没有办法在调用fgets后撤回刚读取的行?我知道当您使用fgetc时,您可以执行ungetc。有没有办法可以为fgets做类似的事情?

我问这个的原因是因为我在if语句中有一个fgets而我不希望实际执行fgets我只想知道它是否会返回{是{1}}。但我知道如果NULL在if语句中,它将被执行。这就是为什么我想知道在调用fgets之前如何将其移回文件中的点。

3 个答案:

答案 0 :(得分:4)

没有任何有趣的事情。

可以使用ftell在输入流中保存位置,并使用fseek重新定位到该点。它对文件很有用,但不能从终端读取(即标准输入)。

进一步阅读

答案 1 :(得分:0)

使用ftell并存储位置。有了fseek,你可以随时设置它。

您可以搜索换行符或文件开头,但保存位置更容易编码。

答案 2 :(得分:0)

不,没有。 POSIX标准只保证一个字节的推回。

目前尚不清楚为什么要这样做但是如果你试图检查是否已经到达文件的末尾,那么正确的方法是测试fgetc的结果是否与{{{1}相等1}}(然后做EOF)。仅在流上调用ungetc是不够的,因为只有在读取操作无法读取更多字节时才设置文件结束位。

feof