【发布时间】:2017-07-15 23:43:14
【问题描述】:
int x; 因此变量将有 2 个字节的内存。 现在,如果我输入 66 并且因为 scanf() 带有 %d,66 将存储在 2 个字节的内存中,因为变量被声明为 int。
现在在带有 %c 的 printf() 中,应该只从一个字节的内存中收集数据来显示。
但是 %c 通过从内存中获取正确的数据 66 来正确显示 B。
为什么 %c 不只是从一个字节中获取数据?
【问题讨论】:
-
请注意,
int必须至少 16 位宽,但可能而且通常更宽.... -
大胆猜测,您的 int 被隐式转换为 char,保持值 66,适合 char 的 8 位。没有 MCVE,就不可能更精确。
-
@Yunnosch - 不需要 MCVE - 此行为已明确定义。
-
"它 %c 不只是从一个字节中获取数据吗?" --> 它获取 2(或 4)个字节,然后忽略除 1 之外的所有字节进行打印。
标签: c format-specifiers conversion-specifier