C中关于\后的escape sequence(转义字符的含义)
前言:
本人不是language lawyer,所以对于这个问题也是第一次了解(好菜)
先提一下\跟上不能转义的字符会怎么样
\8,\9,\p之类的会直接算作8,9,p
然后编译器会警告
首先是字母,\+n,t,b,r,f等,基本都是格式符,有以下这几种(\x是特殊的,下面会讲)

若\后有多个字母,则取第一个
printf("a\njk");
Output:
a
jk
然后就是数字
首先要知道\0是终止符,ASCII码为0,如果在printf,strlen等函数遇到那么会立即停止操作
举个例子
printf("oo\0oo");printf("%d",strlen("oo\0oo"));
Output:
oo2
接下来就是\ddd格式的用法
读取三个八进制数并转换为对应ASCII码代表的字符,可以含前导0,如果遇到非八进制数(8,9,其它字符)则终止读取
如果字符超界,也算一个字符,但是会被警告
printf("aty\0803y");
Output:
aty
printf("aty\0773y");
Output:
aty?3y
printf("aty\7783y");
Output:
aty?83y
这里提以下\x的用法(一般都不会用),\ddd代表八进制ASCII码,那么\xhh就是代表十六进制ASCII码
MinGW64(不知道其它编译器是不是这样)会读取\x后的所有十六进制字符,遇到非十六进制字符停止
也就是\x165151656115616651650代表的ASCII码超界,但是它只代表一个字符
如果是aa\x0r123,遇到r停止,转义就是ASCII码0终止符,字符长度就只有2
总体来说就是和\ddd格式大同小异的
最后就是在遇到特殊格式时该怎么输出像\"?这样的字符

假如我要输出"\098"
有以下两种解决办法
printf("\\098"); printf("\134098");
加深印象的例子:
strlen("ab\n\012\\\")
6 'a' 'b' '\n' '\012' '\' '\'
printf("abc\\\061xy")
abc\1xy
'a' 'b' 'c' '\' '\061'(转换为ASCII码为1) 'x' 'y'
strlen("\t\b\0996\0123\n")
2 遇到\09直接终止

浙公网安备 33010602011771号