呵呵!!我该如何把整个事情放在一个明确的问题中!!让我试试:
我知道使用打开的文件fopen()
被缓冲到内存中。我们使用缓冲区来提高效率和易用性。在从文件读取期间,文件的内容首先被读取到缓冲区,然后我们从该缓冲区中读取。类似地,在写入文件,内容先写入缓冲区,然后写入文件。
但是fseek()
,fsetpos()
之前rewind()
调用的效果如何ungetc()
呢?你能告诉我它是怎么做的吗?我的意思是,鉴于我们已经打开了一个文件进行读取并将它复制到缓冲区中。现在使用ungetc()
我们已经更改了缓冲区中的一些字符。这就是我什至无法理解的内容很多努力:
以下是关于
ungetc()
- “调用 fseek、fsetpos 或 rewind on stream 将丢弃之前使用此函数放回其中的任何字符。” --已经放入缓冲区的字符如何丢弃?一种方法是把原来被删除的字符“记住”,每一个放入的新字符都被识别并替换为原来的字符。但是这样看起来效率很低。另一种选择是将原始文件的副本加载到缓冲区中并将文件指针放在预期的位置。这两种方法中 fseek、fsetpos 或 rewind 采用哪种方法来丢弃使用的字符ungetc()
?对于文本流,流中未读字符的存在如何影响返回
ungetc()
值ftell()
?ftell()
ungetc()
ftell
“对于文本流,数值可能没有意义,但仍可用于稍后使用 fseek 将位置恢复到相同位置(如果使用 ungetc 放回的字符仍等待读取,则行为未定义)。”
- 关注上一段的最后一行,
pending of being read
与丢弃“ungetc()-obtained”字符有什么关系?每次我们读取一个放入流中的字符时ungetc()
,它是否在读取后被丢弃?