转义字符的详细介绍(对初学者有帮助)

目录

1.转义字符的简义

2.转义字符的种类

2.1 九个典型的转义字符

2.1.1 可打印类转义字符(1~4)

2.1.2 功能类转义字符(5~9)

2.2 两个关于数字的转义字符

2.2.1 作用(10~11)

2.2.2 字符 \0

3.转义字符的长度

3.1 strlen与转义字符长度

3.2 易错字符串长度的例子分析


1.转义字符的简义

        顾名思义,转义字符是一种与原字符意义不相同的一种字符类型。

        举个简单的例子:字母n是一个只是一个普通的字符,在字符串打印时自然会原封不动地被打印出来。但如果在n前面加上一个反斜杠 \ 组成字符 \n的话,那么字符串在打印的过程中都不会把 n 或 \n 打印出来,而是会在原本是n的地方实现换行功能

下面用代码来解释:(左边是代码,右边是终端的结果)

字符n:

转义字符 \n:

2.转义字符的种类

        转义字符有上百个,因为该篇文章是面向初学者的,我将选取最具代表性的11个转义字符,并详细讲解他们的用法以及它们的用途举例

2.1 九个典型的转义字符

2.1.1 可打印类转义字符(1~4)

1.  \' 用法:⽤于表⽰字符常量

用途场景:当我们想把符号 ' 打印出来的时候,如果只是像下面这样处理的话会报错 

错误的原因在于,系统不会认为中间的单引号 ' 是字符,在编译器中单引号 ' 和双引号 " 必须成对出现,否则就会报错。此时有3个 ' ,只能构成一对单引号,剩下一个 ' 不能配对,造成了编写错误“缺少右引号”。

那我们应该如何把 ' 打印出来呢?方法很简单,只需要用转义字符 \' 就能实现。如下

2. \" 用法:⽤于表⽰⼀个字符串内部的字符常量 "

用途场景:当我们想把符号 ' 打印出来的时候,如果只是像下面这样处理的话会报错

错误原因其实是和上面的单引号是一样的,我就不重复了,直接给出正确示范。

3. \? 作用:⽤于表⽰字符常量 ?  ,在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在                       新的编译器上已经没法验证了。

用途场景:这里给大家解释一下解析成三字母词是什么情况

假如我们要打印这句话“(are you ok??)”

如果这样写: printf("(are you ok??)");

在旧编译器中,??) 会组成三字母词从而变成 ] ,则结果为:(are you ok]。

所以要写成:printf("(are you ok\?\?)");

在新编译器中不会出现这样的错误

4. \\ :⽤于表⽰⼀个反斜杠 \ ,防⽌它被解释为⼀个转义序列符。

用途场景:假如我们要打印一个文件路径:c:\number1\test

结果为:                              

                                  

错误的原因是 n、t 与 \ 结合成了转义字符 \n 、\t

正确的做法是,使用转义字符 \\ :

2.1.2 功能类转义字符(5~9)

5. \a 警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

      在vs2020中,写出 printf("\a"); 后,按下f5键(或ctrl+f5)弹出终端时,会发出声音。

        (有趣的小东西)

6. \b :退格键,光标回退⼀个字符,但不删除字符。

     很多同学刚学到 \b 的时候,经常会以为它的作用是删除前一个字符,其实它真正的作    用是使光标回退一个字符

     如果 \b 后面还有字符,那么该字符会在回退后的光标处打印,并把 \b 前一个字符覆盖上,从而实现 删除前一个字符的效果。(比如在 \b 后面加上空格)

代码演示:此时光标停在了 d 的前面

当 \b 后面还有字符,则会把 d 覆盖掉,实现删除 d 的效果


注意:光标后面的字符 会被 \b 后面的字符 一 一对应地替换掉,如果没有则保留

代码演示:

此时光标在d处

在后面加上h i 的话,原本的cd 会被hi 覆盖;这4个字符没有被完全覆盖,所以还有字符被保留下来

为什么f被空格覆盖了? 因为这是一串字符串,而每个字符串后面都隐藏了一个转义字符\0,

                                       字符\0把 f 覆盖了;但又因为 \0是无法打印出来的,所以是一个空格。


7.  \t 制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数(有的可能是4的倍数,这是编              译器决定的)。

8. \n 换⾏符

        【开头有演示,这里不再赘述】

9. \r 回⻋符,光标移到同⼀⾏的开头。

这里直接代码演示:光标来到了a这个位置,即该行的行头位置

与 \n 不同:如果我们把\r改成\n后,光标去到了下一行的位置

与 \b 相似:如果我们在 \r 后面加上其他字符,那么字符串会在行头处开始被覆盖

2.2 两个关于数字的转义字符

2.2.1 作用(10~11)

10. \ddd :d d d表⽰1~3个⼋进制的数字。       

 如:\130表⽰字符X      :

注意:\ddd 最多是3位八进制数,因为ASCII码只有256个,如果八进制数ddd超过十进制数              255将会没有意义。而对于最小的4位八进制数1000是 8^3 = 512(大于255),所以不能            写成\dddd。

11. \xdd :d d表⽰2个⼗六进制数字。                

如:\x40表⽰字符@       ​​​​:​​

注意:\xdd 最多是2位十六进制数,因为ASCII码只有256个,如果十六进制数xdd超过十进               制数255将会没有意义。而对于最小的3位十六进制数x100是 16^2 = 256(大于255),             所以不能写成\xddd。

2.2.2 字符 \0

字符\0 就是 转义字符\ddd类型 中的一种,它表示的是空字符终止符,无法被打印出来。

'\0' == 0 ,字符\0的ASCII码值 等于 数值0

 而 '0' == 48 ,所以字符\0与字符0是不一样的

3.转义字符的长度

3.1 strlen与转义字符长度

strlen的补充说明:

        strlen()函数是用来计算字符串长度的函数,它的特点是从字符串中的第一个字符开始数,数到 \0 前一个字符结束。

 这里给出结论:除了字符 \0 的长度是0,其他的转义字符长度都是1

 这里用上述11个转义字符举例:

                                        结果:

关于数字的转义字符长度也是1

                                            结果:

值得注意的是,\0 与 \x0 是同一个东西,因为他们的十进制数都是0。

3.2 易错字符串长度的例子分析

学了这么多,出道蓝题考考你们,你们觉得 strlen("c:\test\abc\178\test.c") 有多长?

……

……

……

答案是17。 其中里面的转义字符有:\t  \a  \17 \t

为什么数字转义字符是\17而不是\178?(易错点)

 因为此时是八进制转义字符,八进制中出现的数字不能大于等于8


你学会了吗?(^_^)(^_^)(^_^)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值