根据this question的逻辑,以下代码应该起作用:
#include <stdio.h>
int main(){
printf("%c", '\0101');
return 0;
}
但是,it gives the following error:
main.c: In function 'main':
main.c:5:18: warning: multi-character character constant [-Wmultichar]
printf("%c", '\0101');
^~~~~~~
exit status -1
我不确定为什么它是一个多字符常量。我相信在这些单引号内应该只有一个字符常量(八进制101
=十进制65
= 'A'
)。为什么会有不止一个字符?为什么八进制表示法不起作用?
答案 0 :(得分:6)
八进制char
的形式应为\abc
,其中a
,b
和c
是八进制数字(即,包括在内) 0
到7
的范围内。)
您有四位数,因此编译器会将其解释为\010
(最大修改次数),后跟1
。
这是一个多字符常量,类似于'12'
。与\abc
相似,它具有int
类型,但是值是实现定义的,并且在c
中向printf
的转换将具有实现定义的行为。您有用的编译器会提醒您这一点,并且毫不奇怪,它使用的是正确的术语。
您是要写'\101'
吗?如果您这样做了,并且您真正想要的是大写字母A,那么为便携式C写下'A'
。
答案 1 :(得分:5)
应为'\101'
而不是'\0101'
。您可以使用'\x41'
(十六进制)或'\101'
(八进制)代替'A'
。但是,两者都会降低代码的可移植性和可读性。只有在没有更好的方式表示字符时,才应考虑使用转义序列。