我正在向 geeksforgeeks学习 当我看到这个时,我的脑海中浮现出一个想法,因为 getchar()
和其他类似的函数返回一个 int (无论是由于程序失败还是 EOF),那么为什么使用格式说明符是%c
,为什么不是%d(或%i)
。
// Example for getchar() in C
#include <stdio.h>
int main()
{
printf("%c", getchar());
return 0;
}
我知道我们输入的字符是一个字符,它由函数 getchar()
获取,我们使用 %c
显示它。
但我的问题是在整个过程中 getchar()
和 printf()
内部实际发生了什么,其中 getchar()
返回该整数,它的存储位置以及我们输入的字符如何通过 printf() 来显示,即 printf() 内部发生了什么?
我对 printf() 实现进行了一些研究,并了解 printf 是 C 标准库
(又名 libc
)的一部分)并且是一个可变参数函数( printf ),但我不知道这个函数内部到底发生了什么以及它如何通过格式说明符知道它必须打印字符或整数?
请帮助我了解正在发生的整个详细过程。
最佳答案
getchar
的手册页内容如下:
fgetc()
reads the next character from stream and returns it as anunsigned char
cast to anint
, or EOF on end of file or error.
getc()
is equivalent tofgetc()
except that it may be implemented as a macro which evaluates stream more than once.
getchar()
is equivalent togetc(stdin)
.
假设您输入字符A
。假设您的系统使用字符的 ASCII 表示形式,则该字符的 ASCII 值为 65。因此在本例中,getchar
返回 65 作为 int
。
然后将 getchar
返回的 int
值 65 传递给 printf
作为第二个参数。 printf
函数首先查看格式字符串并查看%c
格式说明符。 printf
的手册页对 %c
进行了如下说明:
If no
l
modifier is present, theint
argument is converted to anunsigned char
, and the resulting character is written.
因此,printf
将下一个参数读取为 int
。由于我们传入了值为 65 的 int
,因此它读取的内容就是这样。然后将该值转换为 unsigned char
。由于该类型仍然很流行,因此该值仍然是 65。然后 printf
打印该值的字符。由于 65 是字符 A
的 ASCII 值,因此会出现字符 A
。
关于c - getchar() 和 printf() 内部到底发生了什么?解释一下整个过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391457/