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
.
我很想知道 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()
andputchar()
return the character written as an unsigned char cast to an int orEOF
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
.