gpt4 book ai didi

c - ungetc:回推的字节数

转载 作者:太空狗 更新时间:2023-10-29 15:14:19 26 4
gpt4 key购买 nike

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”处给出错误。

总结

  • Linux:大 (4 KiB)
  • MaxOS X:大 (4 KiB)
  • Solaris:4
  • HP-UX:1
  • AIX:1

因此,AIX 和 HP-UX 只允许对尚未读取任何数据的输入文件进行一个字符的回推。这是一个令人讨厌的案例;一旦从文件中读取了一些数据,它们可能会提供更多的回推能力(但是在 AIX 上添加 getchar() 的简单测试在循环之前不会改变回推能力)。

关于c - ungetc:回推的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com