C中的\是什么意思

Kok*_*zzu 3 c escaping string-literals

我知道\ x是ASCII文字的十六进制表示

printf("%c",'\x41'); // A
printf("%c",'\X41'); // 1
Run Code Online (Sandbox Code Playgroud)

为什么?

参考:http://c.comsci.us/etymology/literals.html(见最底层表)

pad*_*ddy 8

这不是标准,因此结果会有所不同.

鉴于这\X不是一个有效的控制序列,您的特定编译器将选择单引号中的最后一个字符并使用它.

所以,如果你这样做了:'\X12345'你可能会得到5.没什么特别的\X.如果你从你的躲避字符文字中取出它,你会得到相同的结果.

  • 我可以确认在我的GCC版本上打印'\ X12345'确实会打印5. (2认同)

Jey*_*ram 7

我请求你用-Wall选项编译.

aaa.c: In function ‘main’:
aaa.c:6:14: warning: unknown escape sequence: '\X' [enabled by default]
aaa.c:6:14: warning: multi-character character constant [-Wmultichar]
Run Code Online (Sandbox Code Playgroud)

从上面的消息X被忽略.

考虑到'41',这是多字符字符常量.

正如@paddy所说,最后一个字符在sinle-quotes中使用.所以字符'1'被打印出来.

一组逃脱序列

\a alert (bell) character              \\ backslash
\b backspace                           \? question mark
\f formfeed                            \’ single quote
\n newline                             \" double quote
\r carriage return                     \ooo octal number
\t horizontal tab                      \xhh hexadecimal number
\v vertical tab
Run Code Online (Sandbox Code Playgroud)