转义字符使用详解【C语言】

目录

转义字符的概念

转义字符表

转义字符详解 和 实际使用示例

一、\a

二、\b

三、\f

四、\n

五、\r

六、\t

七、\v

八、\\

九、\'

十、\"

十一、\?

十二、\0

十三、\ddd

十四、\xhh

总结——


转义字符的概念

所有的 ASCII码都可以用“\加数字” 来表示。而C 中定义了一些字母前加“\"来表示常见的那些不能显示的 ASCI 字符,如\t, \n 等,就称为转义字符,因为后面的字符,都不是它本来的 ASCII 字符意思了。(转义字符,顾名思义就是转变原来的意思)

转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列

转义序列通常有两种功能

  1. 第一个是编码一个句法上的实体,如设备命令或者无法被字母表直接表示的特殊数据。
  2. 第二种功能,也叫字符引用,用于表示无法在当前上下文中被键盘录入的字符(如字符串中的回车符),或者在当前上下文中会有不期望的含义的字符(如C语言字符串中的双引号字符",不能直接出现,必须用转义序列表示)。在后面那种情况,转义序列是一种由转义字符自身和一个被引用的字符组成的一个二合字母(digraph)情形

关于转义字符的更多介绍——转义序列 - cppreference.com

转义字符表

转义字符详解 和 实际使用示例

一、\a

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

#include<stdio.h>
int main()
{printf("\a");return 0;
}

在VS2022测试为警报

二、\b

退格键,光标回退⼀个字符,但不删除字符

#include<stdio.h>
int main()
{printf("abcdef");return 0;
}

执行这段代码,程序整除打印abcdef

但在b之前加上\,变为转义字符\b之后

#include<stdio.h>
int main()
{printf("a\bcdef");return 0;
}

程序的执行结果变成了cdef

这是因为在打印a之后,\b为转义字符,光标回退到a之前,继续打印后面的内容会将a覆盖掉

所以c在将a覆盖掉之后,正常打印后面的def

三、\f

换页符,光标移到下⼀页。在现代系统上,这已经反映不出来了,行为改成类似于 \v

四、\n

换行符,将光标位置移动到下一行开头,这是日常写代码中最常用的转义字符

比较下面两段代码的区别

\n 的作用就是在它出现的地方,将光标移动到下一行

五、\r

回车符,光标移到同一行的开头

回车符与换行符类似,但不同的点在于回车符是将光标移动到本行的开头

比较下面两段代码的区别

可以观察到正常情况下,程序执行会打印abcdef

但在abcdef中间加上一个\r转义字符之后,在\r出现的位置,光标被移动到本行开头,所以后面的打印会依次覆盖掉前面已经打印过的内容

六、\t

制表符,光标移到下⼀个水平制表位(可以理解为若干个空格,具体取决于运行环境)

\t转义字符的作用相当于键盘上的 Tab 键

#include<stdio.h>
int main()
{printf("abc\tdef");printf("\n**********");return 0;
}

七、\v

垂直分隔符,光标移到下⼀个垂直制表位,通常是下一行的同⼀列

#include<stdio.h>
int main()
{printf("abc\vdef");return 0;
}

打印abc\vdef时,abc正常打印之后,\v将光标移动到下一行的同一列,之后继续打印def

八、\\

⽤于表示⼀个反斜杠,防⽌它被解释为⼀个转义序列符

例如,当我们想要打印 D:\code\test 这样一段文字的时候,如果直接打印的话,得不到我们想要的结果

#include<stdio.h>
int main()
{printf("D:\code\test");return 0;
}

上面这段代码中printf中的内容,第一个\被解释为一个转义字符,第二个\n和t被解释成\t,水平制表符

如果想要实现在屏幕上打印D:\code\test 应该用两个反斜杠表示一个正常打印的反斜杠,防止被解释成转义字符,如下所示

#include<stdio.h>
int main()
{printf("D:\\code\\test");return 0;
}

九、\'

⽤于表⽰字符常量',防止被编译器解释为成对使用的单引号

例如,我们确实只想打印一个单引号时,如果三个单引号放在一起,编译器就会报错,认为单引号没有成对出现

如果改成下面这段代码,将单引号写成\'  编译器才会理解我们确实只想打印一个单独的单引号

十、\"

⽤于表示⼀个字符串内部的双引号

规则和使用方法和上面的\' 类似,只有在写成\"的时候才能单独使用和打印一个双引号

十一、\?

在书写连续多个问号时使用,防止他们被解析成三字母词,在新的编译器上没法验证了

十二、\0

NULL字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其 ASCII码值是0.

关于\0需要记住最重要的一点是它是字符串的结束标志

字符串会默认在最后添加一个\0作为结束标志,但如果是多个字符的情况下,需要手动添加\0作为结束标志

#include<stdio.h>
int main()
{char arr1[] = {"abc"};char arr2[] = { 'a','b','c' };char arr3[] = {'a','b','c','\0'};printf("%s\n", arr1);printf("%s\n", arr2);printf("%s\n", arr3);return 0;
}

观察上面这段代码的执行结果,以不同的方式打印abc

字符串会默认添加\0作为结束标志,多个字符的情况下想要限定范围必须添加\0,否则就会像第二种,打印结果变得不可控(打印到\0才会停止,所以结果变得不可控)

十三、\ddd

d d d表⽰1~3个⼋进制的数字 ,而\ddd表示1到3位八进制数字所代表的ASCII值 

如: \130表示字符X

130作为八进制在ASCII表对应的是字符X,或者将130转换为十进制为88,对应的ASCII值是X

十四、\xhh

d d表示2个⼗六进制数字, 而\xdd表示2个十六进制数字所代表的ASCII值 

如:\x30表示字符0

30作为十六进制在ASCII表对应的是字符'0',或者将30转换为十进制为48,对应的ASCII值是字符'0'

总结——

关于转义字符在各种情况下的使用方法,没有办法一一列举出来,还是需要在实际使用中多加练习和注意

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为Harmony——ArkTs语言

文章目录 一、简单示例二、声明式UI描述创建组件无参有参数 配置属性配置事件配置子组件 三、自定义组件基本用法基本结构成员函数/变量 一、简单示例 我们以一个具体的示例来说明ArkTS的基本组成。如下图所示&#xff0c;当开发者点击按钮时&#xff0c;文本内容从“Hello Wo…

js 现在的时间距离本月月底的倒计时(html)

现在的时间距离本月月底的倒计时 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-…

博客引擎 hugo intro 入门介绍+安装笔记

hugo 博客引擎 Hugo 是一个流行的静态网站生成器&#xff0c;它被广泛用于创建博客和静态网站。 静态网站生成器&#xff1a;Hugo 是一个静态网站生成器&#xff0c;它将你的博客内容转换为 HTML、CSS 和 JavaScript 文件&#xff0c;这些文件可以直接部署到 Web 服务器上。相…

【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化

引言 动态内存管理的函数有&#xff1a;malloc,calloc,ralloc,free,本文讲解动态内存函数和使用&#xff0c;如何进行动态内存管理,实现通讯录联系人容量的动态化&#xff0c;对常见动态内存错误进行总结。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》…

老毛桃软碟通制作启动盘装机硬盘安装系统

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、老毛桃制作winPE镜像 1、简介 2、老毛桃的主要功能包括&#xff1a; 3、准备 4、制作启动盘流程 5…

vue项目npm run build报错npm ERR! missing script: build(已解决)

vue项目npm run build报错npm ERR! missing script: build&#xff08;已解决&#xff09; 错误描述&#xff1a; 今天准备打包vue项目上线是出现下列错误&#xff1a; 找了很多解决方法都不行&#xff0c;最后打开自己的package.json文件发现&#xff1a;build后面多了个&a…

内皮素-1(Endothelin-1 )ELISA kit

灵敏、快速的内皮素-1 ELISA试剂盒&#xff0c;适用于心血管和应激相关研究 内皮素&#xff08;Endothelin, ET&#xff09;是由血管内皮细胞产生的异肽&#xff0c;具有强大的血管收缩活性。这种肽由三个独立的基因编码&#xff0c;经过加工产生39个残基的 大ET 分子&#xff…

【科普知识】什么是步进驱动器、驱动模式及驱动的方法?

我们已经知道步进电机就是一种将电脉冲信号转化为角位移的执行机构。那么如何精准地控制电机的速度和位置呢&#xff1f;这就需要一种驱动器的装置。 1.什么是步进驱动器&#xff1f; 电机控制原理图 步进驱动器是一种能使步进电机运转的功率放大器&#xff0c;能把控制器发来…

Zabbix自动发现并注册已安装agent的主机

先在被监控主机上安装好zabbix-agent 然后登录zabbix网页 点击发现动作后会出现第三步 然后编辑操作&#xff0c;发现后加入到主机组群 然后编辑发现规则 然后就可以在主机列表中看到被发现的主机。

window下搭建Rocketmq服务及测试demo

下载地址&#xff1a;下载 | RocketMQ 一. RocketMQ部署 系统:Windows7;环境:JDK1.8、Maven3.3、Git&#xff1b; 下载 | RocketMQ 1.1 下载&#xff0c; 进入RocketMQ官网http://rocketmq.apache.org/docs/quick-start/&#xff0c; 这里以编写时的最新版本为例&#…

大疆又出新品:户外电源

大疆创新最近发布了两款强大的户外电源&#xff1a;DJI Power 1000 和 DJI Power 500。这两款产品都具有高效储能、便携易用、安全放心、续航强大等优势&#xff0c;让你在户外探险时拥有更多可能性。 DJI Power 1000 电池容量&#xff1a;1024 瓦时&#xff08;约 1 度电&…

光条中心线提取-Steger算法 [OpenCV]

在线结构光视觉传感器中&#xff0c;由线激光器发射出的线结构光&#xff0c;在本质上为一个连续且具有一定厚度的空间光平面&#xff0c;而在目标表面上所形成的具有一定宽度的光条特征&#xff0c;即为该光平面与目标表面相交而成的交线。在该空间光平面的厚度方向上&#xf…

0x43 线段树

0x43 线段树 线段树&#xff08;Segment Tree&#xff09;是一种基于分治思想的二叉树结构&#xff0c;用于在区间进行信息统计。与按照二进制位&#xff08;2的次幂&#xff09;进行区间划分的树状数组相比&#xff0c;线段树是一种更加通用的结构&#xff1a; 1.线段树的每…

组播地址段及其作用

作用 组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个的接收者传输相同的数据&#xff0c;也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。 地址段 组播协议的地址在 IP 协议中属于 D 类…

Hadoop 集群环境搭建

目录 第一部分&#xff1a;系统安装... 3 1&#xff1a;图形化安装... 3 2&#xff1a;选择中文... 3 3&#xff1a;安装选项... 3 4&#xff1a;软件选项... 4 5&#xff1a;安装位置... 4 6&#xff1a;网络配置... 6 7&#xff1a;开始安装... 7 8&#xff1a;创建用户... 7…

【密码学引论】密码协议

定义&#xff1a;两个或者两个以上参与者为了完成某一特定任务而采取的一系列执行步骤密码协议&#xff1a;Kerberos、IPSec、SSL、SET算法是低层次上的概念&#xff0c;而协议是高层次上的概念&#xff0c;协议建立在算法的基础上。所有密码协议都容易受中间人攻击&#xff0c…

TypeScript实战——ChatGPT前端自适应手机端,PC端

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 可以在线体验哦&#xff1a;体验地址 文章目录 前言引言先看效果PC端手机端 实现原理解释 包的架构目录 引言 ChatGPT是由OpenAI开发的一种基于语言模型的对话系统。它是GPT&#xff08;…

esp32-s3训练自己的数据进行目标检测、图像分类

esp32-s3训练自己的数据进行目标检测、图像分类 一、下载项目二、环境三、训练和导出模型四、部署模型五、存在的问题 esp-idf的安装参考我前面的文章&#xff1a; esp32cam和esp32-s3烧录human_face_detect实现人脸识别 一、下载项目 训练、转换模型&#xff1a;ModelAssist…

外汇天眼:我碰到外汇投资骗局了吗?学会这5招,轻松识别外汇诈骗黑平台!

近年来外汇市场因为交易量大、流动性大、不容易被控盘、品种简单、风险相对低等特色&#xff0c;因此吸引不少投资人青睐&#xff0c;成为全球金融市场的热门选择。 然而&#xff0c;市面上充斥许多诈骗集团设立的黑平台&#xff0c;也打着投资外汇的名义行骗&#xff0c;不免会…

25年老品牌 美好蕴育润康守护孕期妈妈的健康之路

孕期是每一位女性人生中最为特殊的阶段。每一位妈妈都期待着健康、快乐的度过每一天。然而&#xff0c;随着孕周的增加&#xff0c;孕期的不适和困扰也随之而来。孕吐、腰酸背痛、便秘等孕期症状让许多妈妈倍感疲惫和焦虑。在这个关键时刻&#xff0c;美好蕴育润康作为25年的老…