- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
ungetc
只保证接受一个字节的回传。另一方面,我已经在 Windows 和 Linux 上对其进行了测试,它似乎可以使用两个字节。
是否有任何平台(例如任何当前的 Unix 系统)实际上只占用一个字节?
最佳答案
C99 标准(以及之前的 C89 标准)明确表示:
One character of pushback is guaranteed. If the
ungetc
function is called too many times on the same stream without an intervening read or file positioning operation on that stream, the operation may fail.
因此,为了便于携带,您不会假设超过一个推回字符。
话虽如此,在 MacOS X 10.7.2 (Lion) 和 RHEL 5 (Linux, x86/64) 上,我尝试过:
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 4096; i++)
{
int c = i % 16 + 64;
if (ungetc(c, stdin) != c)
{
fprintf(stderr, "Error at count = %d\n", i);
return(1);
}
}
printf("No error up to count = %d\n", i-1);
return(0);
}
我在两个平台上都没有错误。相比之下,在 Solaris 10 (SPARC) 上,我在“计数 = 4”时遇到错误。更糟糕的是,在 HP-UX 11.00 (PA-RISC) 和 HP-UX 11.23 (Itanium) 上,我在“计数 = 1”时遇到错误 - 与 2 是安全的理论相悖。同样,AIX 6.0 在“count = 1”处给出错误。
因此,AIX 和 HP-UX 只允许对尚未读取任何数据的输入文件进行一个字符的回推。这是一个令人讨厌的案例;一旦从文件中读取了一些数据,它们可能会提供更多的回推能力(但是在 AIX 上添加 getchar()
的简单测试在循环之前不会改变回推能力)。
关于c - ungetc:回推的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814816/
我使用以下代码将其输入到stdin“11+3”,并且 void main(void) { int number; printf("the first call : %d\n", sca
ungetc 只保证接受一个字节的回传。另一方面,我已经在 Windows 和 Linux 上对其进行了测试,它似乎可以使用两个字节。 是否有任何平台(例如任何当前的 Unix 系统)实际上只占用一个
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
假设我有一个由 fopencookie 创建的 FILE*,如果我在 FILE* 上调用 ungetc 会发生什么>?假设我在 FILE* 上设置了 setvbuf 作为 _IONBF 以使其无缓冲。
Python中的一些文件读取(readlines())函数 将文件内容复制到内存(作为列表) 我需要处理一个太大的文件 被复制到内存中,因此需要使用 一个文件指针(访问文件一个字节 一次)——就像在
在标准C库中,ungetc()不写入文件吗? 它只移动文件位置吗? 可以不事先阅读就使用吗?即它可以独立于其他 IO 函数使用吗? 是否可以在不需要一次一个字符的读取功能之后使用它,即一次读取多个字符
ungetc() 似乎在某些字符上失败。这是一个简单的测试程序: #include int main(void) { int c; printf("Type a letter and
是否有 ungetc 的 C++ 版本? 也就是说,我可以将角色放回 istream 吗? 最佳答案 是的。 istream::putback与 ungetc except if using unge
我想知道 std::cin::ungetc 接受多少个字符。它与 C 中的相同吗(因此可移植 1,见下文)? 相关 SO 帖子 "ungetc: number of bytes of pushback
int ungetc(int c, FILE *fp) 将字符 c 推回 fp,并返回 c 或 EOF 作为错误。 where as int putc(int c, FILE *fp) 将字符 c 写
我想在收到 SIGUSR1 时使用 ungetc 将一个“A”字符填回标准输入。想象一下,我有充分的理由这样做。 当调用 foo() 时,stdin 中的阻塞读取不会在收到信号时被 ungetc 调用
我猜想,在 scanf("%d") 之后 ungetc() 可能会失败,因为 scanf 可能会为第一个非数字字符隐式调用 ungetc()。 但如果格式以 %c 结尾,就不会发生这种情况,对吗? 最
我遇到过这样一个 getword 的例子。我了解所有检查等,但我对 ungetc 有疑问。 当c满足if ((!isalpha(c)) || c == EOF)且不满足while (isalnum (
我无法理解我的程序的行为。它调用 scanf,然后是 ungetc,然后是 printf。 我无法理解输出行为背后的原因。这是代码。如果有人澄清了行为,将会有很大的帮助。 int main() {
在我的代码中,我试图完成这样的事情(用伪代码编写): While not at EOF: Get line Write line to different file Skip
我是 C 初学者,我想连续调用 ungetc() 两次,尽管我知道在常规 C 中这是不允许的。有人告诉我可以修改 Fflush() 来完成这项工作,但我不知道该怎么做。 这是我的代码,我的Fflush
我在看一本关于linux编程的书时想到了,我在我的电脑上试了一下,代码运行良好,但我就是不明白它是如何工作的,希望有人能帮我解释一下, 提前致谢!我的代码如下: #include #include
谁能给我解释一下ungetch的用途?这是来自 K&R 第 4 章,您将在其中创建反向波兰计算器。 我在没有调用 ungetch 的情况下运行了该程序,在我的测试中它仍然可以正常工作。 int ge
我正在将 net-snmp 移植到一个嵌入式平台,该平台对文件系统的访问权限有限,但我偶然发现了一个大问题。有一部分核心代码使用了 ungetc() 函数,但我没有。当然有两种解决方案: A)使用我拥
我是一名优秀的程序员,十分优秀!