gpt4 book ai didi

c - 在 C 语言中, `fputc` 什么时候可以返回第一个参数以外的值?

转载 作者:行者123 更新时间:2023-12-05 01:06:12 25 4
gpt4 key购买 nike

C17 (N2176) 标准规定,如果没有写入错误,“fputc 函数返回写入的字符”(7.21.7.3)。

但在上下文中

int c ;
// ... later, c is assigned an "interesting" value ...
int k = fputc ( c , stdout ) ;

k == c || k == EOF

总是true?即,如果 fputc 不返回 EOF,是否保证返回 c?换个说法,fputc可以写一个不等于第一个参数的字符吗?

例如,如果我请求输出美元符号(不保证在源或执行字符集中,AFAICT),可以 '\u0024' != fputc('\u0024', stdout)。也许程序会输出一个本地货币符号,而不是。

澄清

问题是

In C, when may fputc return other than its first argument?

到目前为止(2021-10-20)的部分答案似乎是:

  • fputc过程中发生写入错误时,
  • (unsigned char) c != c

我还在疑惑

假设 (unsigned char) c == c,但 (unsigned char) c 不匹配执行字符集中的字符。 fputc 是否允许写入其他字符?

例如,假设执行字符集中不存在c == (unsigned char) '\u0024'(ASCII美元符号)(因为执行字符集是非ASCII)。 fputc 可以写,比如说,另一个货币符号(或一些任意字符)。

最佳答案

is k == c || k == EOF always true?

通常是,但不是。

使用 fputc ( c , stdout )c 被转换为 unsigned char 并被写入。返回的是那个值或 EOF

相反,期望 k == (unsigned char) c || k == EOF.

The fputc function writes the character specified by c (converted to an unsigned char) to the output stream ...
Returns: The fputc function returns the character written. If a write error occurs, the error indicator for the stream is set and fputc returns EOF. C17dr § 7.21.7.3 2-3


一个不太罕见的例子是,当 ch 是从一个 signed 且值小于 0 的 char 分配的.函数返回值预计为[0...UCHAR_MAX]EOF

例子

char ch = -96;
printf("%d %d %d\n", SCHAR_MIN, ch, fputc(ch, stdout));

输出

�-128 -96 160

Maybe the program will output a local currency symbol, instead.

fputc('\u0024', stdout),同fputc(0x24, stdout)fputc(36, stdout) ,看到的符号是特定于实现的。 C 没有指定使用 ASCII,即使它无处不在。 C 不指定字符渲染的字体或形状。不过,可能会是 $

关于c - 在 C 语言中, `fputc` 什么时候可以返回第一个参数以外的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69639503/

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