C 编程/stdio.h/ungetc
外观
Ungetc 是 C 标准库函数 ungetch 的一个版本。它是一个受限的函数。
int ungetc (int c, FILE *stream)
这里,c 是一个字符变量,stream 是一个文件指针,整个函数用整数数据类型表示。
如上所述,它是一个受限版本的 ungetch,该函数将由 c 的值指定的字符推回。在推回时,字符 c 被转换为 unsigned char 然后推回输入 stream。如果对流应用 getc 函数,则可以将推回的字符返回。
一次调用只允许推回一个字符。尝试连续推回可能无法正常工作。在正常和通常的做法中,该函数被调用 4 次,因此连续推回 4 个字符。这意味着该函数的过程完全依赖于机器。因此,如果机器中的内存很大,则有可能无限次地推回字符。
推回的字符将由流上的任何后续读取(反向顺序)返回,如果流来自缓冲,则意味着最后推回的字符将首先返回。当正常推回字符时,该函数返回最后一个推回的字符。如果推回操作没有正确完成,意味着推回字符不成功(例如,如果文件未打开),则返回 EOF 字符作为错误。不能使用 ungetc 将 EOF 字符推回流。成功调用 ungetc 函数会清除流的 EOF 指示符。
要擦除来自调用 ungetc 函数的推回字符,在从流中读取字符之前,需要调用 fseek、fsetpos 或 fflush 函数。由于所有推回的字符都被读取,因此文件位置指示符与推回字符之前的状态相同。
如前所述,它是函数 ungetch 的受限版本,它有相同的限制,就像读取操作紧随写入操作或反之亦然时一样。这就是为什么需要在 ungetc 和随后的 write 或 read 函数之间进行中间重新定位的原因。