使用八进制字符会发出警告:多字符常量

时间:2018-06-22 14:35:32

标签: c

根据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')。为什么会有不止一个字符?为什么八进制表示法不起作用?

2 个答案:

答案 0 :(得分:6)

八进制char的形式应为\abc,其中abc是八进制数字(即,包括在内) 07的范围内。)

您有四位数,因此编译器会将其解释为\010最大修改次数),后跟1

这是一个多字符常量,类似于'12'。与\abc相似,它具有int类型,但是值是实现定义的,并且在c中向printf的转换将具有实现定义的行为。您有用的编译器会提醒您这一点,并且毫不奇怪,它使用的是正确的术语。

您是要写'\101'吗?如果您这样做了,并且您真正想要的是大写字母A,那么为便携式C写下'A'

答案 1 :(得分:5)

应为'\101'而不是'\0101'。您可以使用'\x41' (十六进制)'\101' (八进制)代替'A'。但是,两者都会降低代码的可移植性可读性。只有在没有更好的方式表示字符时,才应考虑使用转义序列