在C中将字符推回stdin

sdnqo3pr  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(122)

说输入流(stdin)上有“abc”。我想将3个'*'字符推回stdin,以获得类似“***abc”的内容。我尝试使用ungetc()(我为此做了ungetc('*', stdin)),但我意识到它只保证1个字符的回推,然后它可能会失败。有没有其他方法可以把3(或任何已知的N)数量的字符推回stdin?

nmpmafwu

nmpmafwu1#

没有便携式的方法来实现这一点。
然而,大多数标准C库的实现都允许在合理的范围内进行多次回推,所以在实践中,这可能不是一个问题。
如果你需要一个绝对的保证,你需要编写你自己的stdio实现。这当然是可能的,因为你可以修改开源实现。但是这是一个很大的工作量。或者,你可以使用FreeBSD库,如果它适用于你的平台,因为它确实保证了重复ungetc调用的可能性。(据我所知,GNU实现也允许任意的ungetc调用,但文档并不保证这一点。)
有些库包含非标准接口,比如GNU的fopencookie,它允许你用自定义的低级读写函数创建stdio流,不幸的是,这些对这个特殊的用例没有帮助,这个用例需要定制stdio缓冲区的实现,所以这是一个死胡同;我之所以提到它,是因为它乍看上去似乎是有道理的。

相关问题