cursor: url(https://files-cdn.cnblogs.com/files/zouwangblog/cursor.ico),auto;

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直接终止

posted @ 2020-12-28 10:00  Art-Yrr  阅读(504)  评论(0)    收藏  举报