用printf打印字符

18 c c++ printf sizeof

这两个代码是否相同

char ch = 'a';
printf("%d", ch);
Run Code Online (Sandbox Code Playgroud)

它会打印垃圾值吗?

我很困惑

printf("%d", '\0'); 
Run Code Online (Sandbox Code Playgroud)

这会打印0还是垃圾值?因为我这样做的时候

printf("%d", sizeof('\n')); 
Run Code Online (Sandbox Code Playgroud)

它打印4.为什么是sizeof('\n')4个字节?C++中的相同内容打印1个字节.这是为什么?

所以这是主要问题

在c语言中printf("%d", '\0')应该打印0

在C++中printf("%d", '\0')应该打印垃圾?

peo*_*oro 36

%d打印一个整数:它将打印您角色的ascii表示.你需要的是%c:

printf("%c", ch);
Run Code Online (Sandbox Code Playgroud)

printf("%d", '\0');打印ascii表示'\0',为0(通过转义0,告诉编译器使用ascii值0.

printf("%d", sizeof('\n'));打印4因为字符文字是intC,而不是a char.

  • 这实际上正是我所寻找的(通过搜索引擎来到这里).即使它没有回答OP的原始问题,它也会帮助其他人 (8认同)

sco*_*fey 8

这应该打印字符的ASCII值,就像%d整数的转义序列一样.因此,作为参数给出的值printf在打印时被视为整数.

char ch = 'a';
printf("%d", ch);
Run Code Online (Sandbox Code Playgroud)

同样适用于printf("%d", '\0');NULL字符被解释为0整数的情况.

最后,sizeof('\n')是4,因为在C中,这个字符表示法代表相应的ASCII整数.所以'\n'与整数10相同.

这一切都取决于你给字节的解释.


Joh*_*ode 6

在C中,字符常量表达式例如'\n''a'具有类型int(因此sizeof '\n' == sizeof (int)),而在C++中它们具有类型char.

声明printf("%d", '\0');应该只打印0; 表达式的类型'\0'int,其值为0.

该语句printf("%d", ch);应打印该值的整数编码ch(对于ASCII,'a'== 97).


orl*_*rlp 5

在C中char被提升到int表达式中.如果你考虑一下,这几乎可以解释每一个问题.

资料来源:Brian W.Kernighan和Dennis M.Ritchie的C编程语言

如果你想学习C,必须阅读.

另外看到这个堆栈溢出页面,那里的人们经验丰富,然后我可以解释它比以前更好.