c 中的 putc() return 是什么意思?

What does putc() return in c?

我很想知道 putc() return 的作用。我正在经历以下 link:https://www.tutorialspoint.com/c_standard_library/c_function_putc.htm。现在,如果 putc() returns EOF 出错,那么一个自然的问题是文件末尾的 return 是什么?为此,我在 dev c++ 中编写了以下内容:

代码

#include <stdio.h>

int main() {
    char ch = EOF;
    printf("%d\n", putc(ch, stdout));
    printf("hello %d", EOF);

    return 0;
} 

输出

255
hello -1

这有点奇怪。谁能帮我吗 ? EOF 不是 What is the ascii value of EOF in c.? 中所述的 ASCII 字符,那么为什么第一行是 255(是的,它不是 ASCII)而第二行是 -1

根据 fputc 关于 cppreference.com 的文档,该字符在内部转换为 unsigned char:

Internally, the character is converted to unsigned char just before being written.

如果你现在有一个(可能有符号的)字符,并且你分配 char ch = EOF,如果 EOF 实际上是 -1,那么将 (char)-1 转换成 (unsigned char)-1 给出 255,然后作为 int 传回。

EOF 是 -1,您可能已经发现了。所以如果你 putc(EOF,stdout) 那么你会在输出中看到 255 因为 -1 在打印之前被转换为 unsigned char

来自 a putc() manual:

fputc(), putc() and putchar() return the character written as an unsigned char cast to an int or EOF on error.

(强调我的)

EOF 是一个不同于任何字符值的 int 常量,因此自然的选择可能是 -1(许多实现都使用它)。

现在,如果您的 char 签名的 ,将 EOF 转换为 char 仍然是 -1。但是该函数使用 unsigned char 作为字符,因此它 returns 255 (这与解释为 unsigned[=46 的值相同) =],假设带符号的值存储在 2 的补码中并且您的 char 有 8 位)。


只需按文档中的方式使用函数 记录:将 unsigned char 传递给打印(字符常量即可)并将 return 值作为一个 int。如果 return 值不是 EOF,则 您可以将其解释为 unsigned char.