此C代码如何工作。我得到56作为\ 08的输出

时间:2019-11-09 11:44:31

标签: c

此代码的输出为56。

//输出:56

#include <stdio.h>

int main() {
    char c = '\08';
    printf("%d",c);
    return 0;
}

3 个答案:

答案 0 :(得分:6)

正如@stark所评论的那样,您的常数由2个字节“ \ 0”和“ 8”组成。存储在变量c中时,它们被截断为'8'。

ASCII Character Chart中,您可以看到ASCII中的8是56,这是因为您使用%d格式说明符进行打印的:

enter image description here

如果您注意自己的警告,您可能会发现自己:

main.c:4:14: warning: multi-character character constant [-Wmultichar]
    4 |     char c = '\08';
      | 

此外,我建议您尝试这样打印:

printf("%c", c);

,然后输出将是:

  

8

向您显示变量c中实际存储的内容。


提示:如果您使用char c = '\01';char c = '\07';以及两者之间的任何内容,您将看到无警告以及正在打印的相应数字,因为这些是有效的八位数字,正如@Gerhardh的答案所提到的。

答案 1 :(得分:4)

在C字符串或字符文字中,可以转义十六进制或八进制值。

前缀'\0'用于八进制值,而'\x'用于十六进制值。 这意味着'\0'等于0,'\011'等于9等等。

在您的情况下,'8'后跟无效的八进制数字。因此,转义序列在此处停止,并且您的文字与值0相同,后跟字符'8'

现在,您的字符文字包含多个字符。这是一个多字节字符文字,该文字的值是实现的依赖。 在您的情况下,字符的最终值是最后一个字符的值,例如'8',其ascii值为0x3856

将其打印为十进制数字时,您会得到56

答案 2 :(得分:0)

将值“ 8”作为字符。在ASCII中,其值为56。基本上,char仅包含1个字符