有没有办法在调用fgets
后撤回刚读取的行?我知道当您使用fgetc
时,您可以执行ungetc
。有没有办法可以为fgets
做类似的事情?
我问这个的原因是因为我在if语句中有一个fgets
而我不希望实际执行fgets
我只想知道它是否会返回{是{1}}。但我知道如果NULL
在if语句中,它将被执行。这就是为什么我想知道在调用fgets
之前如何将其移回文件中的点。
答案 0 :(得分:4)
没有任何有趣的事情。
您可以使用ftell
在输入流中保存位置,并使用fseek
重新定位到该点。它对文件很有用,但不能从终端读取(即标准输入)。
进一步阅读
答案 1 :(得分:0)
使用ftell并存储位置。有了fseek,你可以随时设置它。
您可以搜索换行符或文件开头,但保存位置更容易编码。
答案 2 :(得分:0)
不,没有。 POSIX标准只保证一个字节的推回。
目前尚不清楚为什么要这样做但是如果你试图检查是否已经到达文件的末尾,那么正确的方法是测试fgetc
的结果是否与{{{1}相等1}}(然后做EOF
)。仅在流上调用ungetc
是不够的,因为只有在读取操作无法读取更多字节时才设置文件结束位。
feof