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

Gau*_*don 3 c

按照这个问题的逻辑,下面的代码应该工作:

#include <stdio.h>

int main(){
    printf("%c", '\0101');
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,它会出现以下错误:

main.c: In function 'main':
main.c:5:18: warning: multi-character character constant [-Wmultichar]
     printf("%c", '\0101');
                  ^~~~~~~
exit status -1
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它是一个多字符常量.我相信在这些单引号内只应该有一个字符常量(octal 101= decimal 65= 'A').为什么有多个字符?为什么八进制表示法不起作用?

Bat*_*eba 6

八进制char表示法应该是这样的形式\abc,其中a,b,和c,是八进制数字(即在的包容范围07).

你有四位数,所以编译器会把它解释为\010(最大munch),然后是1.

这是一个多角色常数,就像'12'.就像\abc,它有一个int类型,但值是实现定义的,转换为cin printf将具有实现定义的行为.您有用的编译器会提醒您,并且毫不奇怪,使用正确的术语.

你的意思是写'\101'吗?如果你这样做了,你真正想要的是大写字母A,那么就写下'A'便携式C.


ano*_*knr 5

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

  • 无论机器的字符集是什么,@ snr`'A'`都会给你一个`A`.`'\ 101'`等假定为ASCII. (2认同)