转义字符使用详解【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'

总结——

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Shell编程自动化之特殊Shell扩展变量

1.变量的处理 1.1 如果parameter变量值为空&#xff0c;那么返回str字符串。 ${parameter:-str} 1.2 如果parameter变量值为空&#xff0c;那么str替代变量值&#xff0c;且返回其值。 ${parameter:str} 1.3 如果parameter变量值为空&#xff0c;那么str当作stderr输出&am…

数据库关系图,如何连接mysql,编码集和校验集,创建/删除/选择/修改/备份/恢复数据库,数据库本质,查看数据库连接

目录 数据库服务器、数据库和表的关系 连接服务 库的操作 查看数据库 编码格式 编码集 校验集 查看支持的规则 查看系统默认规则 查看默认编码集 查看默认校验集 查看各种服务的默认校验集 创建数据库 if not exists 指定格式创建数据库 设置编码集 设置校验集…

安装gnvm,nodejs,npm使用方法

安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址&#xff1a; https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录&#xff0c;如&#xff1a;d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录 1.概述 对于NI RIO系列设备&#xff08;CompactRIO、sbRIO、myRIO等&#xff09;进行编程时&#xff0c;需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”&#xff0c;为用户提供图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于监控系统…

RabbitMQ笔记(基础篇)

RabbitMQ笔记_基础篇 MQ基本概念1. MQ概述2. MQ的优势和劣势2.1 优势☆2.2 劣势2.3 使用 MQ 需要满足什么条件呢&#xff1f; 3. 常见的MQ产品 RabbitMQ基本介绍1. RabbitMQ 基础架构2. RabbitMQ 中的相关概念3. RabbitMQ的6 种工作模式☆4. AMQP 和 JMS4.1 AMQP4.2 JMS4.3 AMQ…

关于“Python”的核心知识点整理大全35

目录 13.3.4 重构 create_fleet() game_functions.py 13.3.5 添加行 game_functions.py alien_invasion.py 13.4 让外星人群移动 13.4.1 向右移动外星人 settings.py alien.py alien_invasion.py game_functions.py 13.4.2 创建表示外星人移动方向的设置 13.4.3 检…

[c]定位查找

本题需要注意的是多组测试&#xff0c;输入一组测试&#xff0c;输出一个值 下面附上代码 #include<stdio.h> int main() {int n,tmp,count;int arr[20];while(scanf("%d",&n)!EOF){count0;for(int i0;i<n;i){scanf("%d",&arr[i]);}sca…

【数据结构】九、排序

目录 一、排序概述 二、插入排序 2.1直接插入排序 2.2折半插入排序 2.3二路插入排序 2.4表插入排序 2.5希尔排序 三、交换排序 3.1冒泡排序 3.2快速排序 四、选择排序 4.1简单选择排序 4.2锦标赛排序 4.3堆排序 五、归并排序 六、基数排序 七、总结 一、排序概述…

DBeaver连接国产数据库的步骤

驱动配置 第一次安装过DBeaver之后&#xff0c;配置下驱动仓库&#xff0c;安装下图所示操作。 添加马爸爸的maven库连接地址 id&#xff1a; maven.aliyun.com 名称&#xff1a; maven.aliyun.com url&#xff1a; https://maven.aliyun.com/repository/central/ 或者 ht…

TCP协议:可靠传输的基石

目录 1. 数据完整性的保证 2. 数据的有序传输 3. 确认应答机制 4. 流量控制 5. 拥塞控制 6. 重传机制 结论 引言 TCP&#xff08;Transmission Control Protocol&#xff09;是计算机网络中的一个重要协议&#xff0c;它以其可靠性而闻名。TCP是一种面向连接的协议&…

影响晶振频率稳定性的因素及解决方法

晶振作为电子设备中的核心元件&#xff0c;其频率稳定性对设备的性能和可靠性具有重要影响。晶发电子将介绍影响晶振频率稳定性的因素&#xff0c;并探讨相应的解决方法。 一、影响晶振频率稳定性的因素 频率&#xff1a;晶振的频率是影响其性能的最重要因素之一。在选择晶振…

MongoDB介绍

一、MongoDB介绍 1.1 mongoDB介绍 MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …

Jetpack DataStore

文章目录 Jetpack DataStore概述DataStore 对比 SP添加依赖库Preferences DataStore路径创建 Preferences DataStore获取数据保存数据修改数据删除数据清除全部数据 Proto DataStore配置AndroidStudio安装插件配置proto文件创建序列化器 创建 Proto DataStore获取数据保存数据修…

Spring AOP入门指南:轻松掌握面向切面编程的基础知识

面向切面编程 1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给…

swing快速入门(二十三)弹球小游戏

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1. 键盘响应监听 2. 使用定时器事件更新画板 3. 定时器事件的开始与暂停 4. 弹球小游戏的坐标逻辑判断 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class swing_test_19 {//创建一个窗…

如何选择适合的UI自动化测试工具

随着软件开发项目的复杂性增加&#xff0c;UI自动化测试成为确保应用程序质量的关键步骤之一。然而&#xff0c;在选择UI自动化测试工具时&#xff0c;开发团队需要考虑多个因素&#xff0c;以确保选取的工具适用于项目需求并提供可靠的测试结果。 1. 了解项目需求 在选择UI自动…

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

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

大型医院PACS系统源码,影像存储与传输系统源码,支持多种图像处理及三维重建功能

PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以数字化的方式将各种医学影像&#xff0c;如核磁共振、CT扫描、超声波等保存起来&#xff0c;并在需要时能够快速调取…

Docker部署 flowable-ui 进行流程建模

Docker部署 flowable-ui 进行流程建模 简介 安装Docker Desktop,本篇无安装步骤安装正常打开运行后&#xff0c;正式开始部署flowable-uicmd执行拉取镜像操作docker pull flowable/flowable-uicmd启动镜像docker run -d --name flowable -p 8081:8080 flowable/flowable-ui修…

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …