【问题标题】:C Programming: Using format specifiersC 编程:使用格式说明符
【发布时间】:2020-12-14 21:50:34
【问题描述】:

在C语言中,答案

char c='61'; 
printf ("%d", c);

是49。

的答案
char c='61'; 
printf ("%c", c); 

是1。

的答案
char c=61; 
printf ("%d", c);

是61。

的答案
char c=61; 
printf ("%c", c);

=。这到底是怎么回事?

【问题讨论】:

  • 您缺少 c=061;c=0x61; 来完成设置。

标签: c char printf


【解决方案1】:

在前两种情况下,

 char c='61';

有实现定义的行为,而不是标准的抱怨。引用C11,第 6.4.5/P10 章

整数字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示的数值。 包含多个字符(例如,'ab')或包含不映射到单字节执行字符的字符或转义序列的整数字符常量的值是实现定义的。[....]

这在您的环境中可能不是有效的行为。您的编译器可能已在此处发出警告。类似的东西

warning: multi-character character constant [-Wmultichar]
     char c='61';
            ^~~~
warning: overflow in implicit constant conversion [-Woverflow]

在其他两种情况下,请阅读most common character encoding, ASCII

  • 当您使用%d 打印整数值时,它会打印值61

  • 当您使用 %c 打印整数值 61 的字符表示时,61 的十进制值用于 ASCII 字符 =。打印出来了。

【讨论】:

  • 小修正:前 2 种情况并非无效,而是简单地定义了实现(C17 草案 §6.4.5 p10)。避免使用它们仍然是个好主意。
  • @user694733 添加了参考。
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多