转义字符使用详解【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.rhkb.cn/news/222276.html

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

相关文章

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

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

C语言之输入输出和字符(2)

目录 缓冲和重定向 ▇缓冲 ▇重定向 字符 转义字符 \和\"……字符和字符" 字符串字面量的写法 字符常量的写法 八进制转义字符和十六进制转义字符 字符编码 在看本节之前&#xff0c;请先看下上一章&#xff0c;做到更好地衔接。https://blog.csdn.net/W061…

基于vue-cli快速发布vue npm 包

一、编写组件 1. 初始化项目并运行 vue create vue-digital-countnpm run serve2. 组件封装 新建package文件夹 ​ 因为我们可能会封装多个组件&#xff0c;所以在src下面新建一个package文件夹用来存放所有需要上传的组件。 ​ 当然&#xff0c;如果只有一个组件&#xff…

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

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

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中&#xff0c;高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件&#xff0c;通过促进将数据无缝摄取到 Elasticsearch 中&#xff0c;在此过程中发挥着至关重要的作用。 然而&#xff0c;显着影响此过程整体有效性的关…

[CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]

文章目录 前言小结 原文地址&#xff1a;https://blog.csdn.net/qq_45752541/article/details/132854115 前言 mesh 和点是最常见的3D场景表示&#xff0c;因为它们是显式的&#xff0c;非常适合于快速的基于GPU/CUDA的栅格化。相比之下&#xff0c;最近的神经辐射场&#xf…

基于Java+Swing实现大鱼吃小鱼小游戏(含用户登陆、注册功能)

基于JavaSwing实现大鱼吃小鱼小游戏 一、系统实现二、功能展示1.效果演示2.游戏界面3.游戏运行界面4.用户登陆 三、其他系统四源码下载 一、系统实现 1、创建窗口对象Ui 2、背景的绘制 3、键盘的监听事件 4、将己方鱼放上去 5、让小鱼移动 6、其他的鱼并引导&#xff08;先创建…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

前端vue keyframes动画

8.1.2 keyframes动画 transition动画适合用来创建简单的过渡效果。CSS3中支持使用animation属性来配置更加复杂的动画效果。animation属性根据keyframes配置来执行基于关键帧的动画效果。新建一个名为keyframes.vue的测试文件。编写如下代码&#xff1a; <template><…

连获4大奖项,欧科云链成Web3行业领跑者

2023年底&#xff0c;作为深耕区块链大数据且持续关注监管与合规科技的Web3企业&#xff0c;欧科云链连续斩获4大奖项&#xff0c;包括第十三届中国证券金紫荆奖、财联社“最具创新价值奖” 、界面新闻“优致雇主奖”与“好公司50”&#xff0c;成为中国Web3领域中最受关注的企…

利用Matplotlib画简单的线形图

实验题目&#xff1a;简单的线形图 实验目的&#xff1a;利用Matplotlib画简单的线形图 实验环境&#xff1a;海豚大数据和人工智能实验室&#xff0c;使用的Python库 名称 版本 简介 numpy 1.16.0 线性代数 Pandas 0.25.0 数据分析 Matplotlib 3.1.0 数据可视化 …

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年

在这个最冷的季节&#xff0c;杭州实在智能科技有限公司&#xff08;以下简称“实在智能”&#xff09;依然表现火爆&#xff0c;近日&#xff0c;实在智能成功完成C轮融资近2亿元人民币&#xff0c;由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…

Kubernetes pod ip 暴露

1. k8s pod 和 service 网络暴露 借助 iptables 的路由转发功能&#xff0c;打通k8s集群内的pod和service网络&#xff0c;与外部网络联通 # 查看集群的 pod 网段和 service 网段 kubectl -n kube-system describe cm kubeadm-config networking:dnsDomain: cluster.localpod…

Gazebo GUI模型编辑器

模型编辑器 现在我们将构建我们的简单机器人。我们将制作一个轮式车辆&#xff0c;并添加一个传感器&#xff0c;使我们能够让机器人跟随一个斑点&#xff08;人&#xff09;。 模型编辑器允许我们直接在图形用户界面 &#xff08;GUI&#xff09; 中构建简单的模型。对于更复…

NCV8460ADR2G在汽车和工业应用中高压侧驱动如何破?

NCV8460ADR2G是一款完全保护的高压侧驱动器&#xff0c;可用于开关各种负载&#xff0c;如灯泡、电磁阀和其他致动器。该器件可以通过有源电流限制和高温关断针对过载情况进行内部保护。 诊断状态输出引脚提供了高温以及开关状态开路负载情况的数字故障指示。 特性&#xff1a;…

Leetcod面试经典150题刷题记录 —— 矩阵篇

矩阵篇 1. 有效的数独2. 螺旋矩阵Python 3. 旋转图像Python额外开辟数组空间原地置换法 4. 矩阵置零5. 生命游戏Python 1. 有效的数独 题目链接&#xff1a;有效的数独 - leetcode 题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验…

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…

FPGA模块——以太网(1)MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码&#xff08;1&#xff09;MDIO接口驱动代码&#xff08;2&#xff09;使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口&#xff0c;即 MDIO 接口&#xff0c;可以配置 PHY 芯片的工…