一.回顾
我们上篇文章主要介绍了转义字符的一些基础用法,如:换行符 \n 、 蜂鸣声 \a、\0 为字符串结束标识
接下来文章将着重介绍转义字符的扩展应用
二. /ddd 与 /xdd 转义字符的使用
ddd 表示1~3个八进制的数字。如:'\130' ---> X
dd表示2个十六进制数字。如:'\x30' -----> 0
我们就以转义字符ddd来举一个例子,代码如下:
#include<stdio.h>
int main(void){
printf("%c",'\130');
return 0;
}
当我们运行程序后可以发现程序输出了一个大写的X,如图所示:
'\130'这个转义字符的意思是将8进制的数字130换算成10进制,最后再将10进制代表的的数字转换为ASCII码中对应的字符,我们可以使用计算器来验算一下,如图所示:
1.在计算器中输入8进制数字130(程序员模式)
注意:八进制在计算器中显示为OCT,十进制为DEC,十六进制为HEX
2.将其换算成DEC(十进制)数字,这里已经换算好了,结果为88
3.查看ASCII码表,找到十进制数88对应的字符,维基百科上有详细的ASCII码表,这里代表的字符为X(大写)
了解完ddd转义字符的意思我们再来看一下xdd转义字符
xdd代表两个十六进制的数字,其中x是固定写在前面的,如 '\x30' 等,与上面类似我们是将 '\x30' 这个十六进制数字转换为十进制数,然后输出该值对应的字符,我们来看下面这段代码:
#include<stdio.h>
int main(void){
printf("%c",'\x30');
getchar();
return 0;
}
我们运行后可以看到程序输出了一个0,我们按照管理打开计算器来进行换算,注意这次需要将计算器的进制调成HEX(十六进制)
我们可以看到十六进制所对应的十进制值是48,我们再去ASCII码表中去查询就可以发现十进制数48所对应的字符为 0 ,如图所示:
补充说明:'\x63' 与 '\x063' 输出的结果都是一样的 0可以省略不写,同时也需要注意当我们使用数字来表示字符的时候也需要注意ASCII码中的有效值范围:0~127 超出这个界限了就无效了,同时编译器也会报错:
三.转义字符扩展试题
我们观察以下代码并思考该程序会输出多少?
#include<stdio.h>
#include<string.h>
int main(void){
printf("len = %d\n", strlen("abcd efg"));
getchar();
return 0;
}
答案是:8 ,我们一个一个数就可以得到答案了前面 a b c d 共占用4个字符,空格(space)键也占用一个字符 随后 e f g 占用3个字符,所以总共是 4 +1 +3 = 8,注意 \0 字符串结束标志并不会被strlen()函数统计
进阶代码:
请问以下代码输出多少:
#include<stdio.h>
#include<string.h>
int main(void){
printf("len = %d\n", strlen("c:\test\114\test.c"));
getchar();
return 0;
}
A.13
B.14
C.15
D.18
答案:A,我们接下来就着重来看这段代码,我们需要努力找出其中暗藏的转义字符,每一个转义字符算作一个字符,首先 \t 为水平制表符,属于转义字符,算作 1 字符,\114 为ddd类型的转义字符算作 1 字符,接下来我们又遇到了 \t 水平制表符,也算作 1 字符,所以除去转移字符一共有10个字符,但是转义字符也是算作 1 字符的,这里有三处转义字符,所以最终答案为:10+3=13,故选A
四.ASCII码表补充
为了方便不能访问维基百科的朋友,我将ASCII码表截图下来,感兴趣或者有需要的时候可以看看:
2023/9/23
王起舟