【发布时间】:2021-02-05 11:56:38
【问题描述】:
当我声明char ch = 'ab' 时,ch 只包含'b',为什么它不存储'a'?
#include <stdio.h>
int main()
{
char ch = 'ab';
printf("%c",ch);
return 0;
}
这里涉及的实际过程是什么?
【问题讨论】:
-
char ch = 'ab';应该给出警告,例如warning: multi-character character constant和warning: overflow in conversion from 'int' to 'char'。不要这样做,这是您作为初学者不需要的特定于实现的东西。 -
编译时启用所有警告(
-Wall使用 gcc 和 clang,但在您的环境中可能会有所不同)。 -
C11 6.4.4.4 p10:“包含多个字符(例如,'ab')的整数字符常量的值 [...] 是实现定义的。”显然,在您的实现中,
'ab'映射到'b'。 -
@pmg 他得到'b'的事实主要是由于将> 8位值截断为字符。
-
@Jabberwocky:这也是我对他的实现的猜测。我相信
if ('ab' == ('a' * 256 + 'b')) puts("I'm right");在他的电脑上打印“我是对的”:) --- ideone.com/Vfxsun