Tag: ungetc

撤消ungetc()的效果:“如何”fseek(),rewind()和fsetpos()这样做?每次都重新填充缓冲区吗?

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