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

news2025/2/5 10:55:35

目录

转义字符的概念

转义字符表

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

一、\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.coloradmin.cn/o/1328238.html

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

相关文章

【C语言刷题每日一题#牛客网BC69】——空心正方形图案

目录 问题描述 思路分析 代码实现 结果测试 问题描述 思路分析 首先根据输入的描述&#xff0c;多组输入需要将scanf放在循环中来实现分析输出的规律&#xff1a;当输入为4时&#xff0c;分别在第0行和第3行&#xff08;4-1行&#xff09;&#xff0c;第0列和第3列&#xf…

Sentinel 流量治理组件教程

前言 官网首页&#xff1a;home | Sentinel (sentinelguard.io) 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形…

PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)

十多年前开发框架时&#xff0c;为了效率不断试过各种代码写法&#xff0c;今天又遇到了&#xff0c;想想php8时代会不会有所变化&#xff0c;结果其实也还是和当年一样&#xff0c;但当年没写博客&#xff0c;但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…

【SpringBoot】之Security集成使用(入门级)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之Security系列》。&#x1f3af…

数据恢复工具推荐!这3款堪称删除文件恢复大师!

“快看看我&#xff01;经常都会莫名奇妙丢失各种电脑文件&#xff0c;但是又无法通过简单的方法找回重要的数据&#xff0c;有没有什么简单的操作可以帮助我快速恢复数据的呀&#xff1f;非常感谢&#xff01;” 在我们的日常生活中&#xff0c;无论是工作还是学习&#xff0c…

软考中级应该选哪个?

选择软考中级科目&#xff0c;应该怎么做&#xff1f; 1.1 软考中级科目有哪些可供选择&#xff1f; 1.2 如何选择适合自己的软考中级科目&#xff1f; 系统集成项目管理工程师真的容易吗&#xff1f; 如何在软考中级阶段选择科目&#xff1f;软考中级共有15个科目。软考共…

鸿蒙开发基本概念

1、开发准备 1.1、UI框架 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术…

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

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

搭建接口自动化测试框架python+requests+pytest

安装python&#xff08;最好是比较新比较稳定的版本&#xff09;&#xff0c;然后是python的解释器或者叫编译器pycharm安装后新建一个项目&#xff0c;以此项目为基础&#xff0c;安装依赖搭建框架。打开pycharm&#xff0c;点击左上角的File->New project->弹出如下界面…

建构伦敦银交易策略可遵循的三个原则

构建交易策略&#xff0c;我们应该遵循什么原则呢&#xff1f;有的人说可以盈利就行了&#xff0c;确实盈利是很关键的&#xff0c;没有人想使用一个导致自己亏损的策略。但构建伦敦银策略的时候可不能简单地以一个可以盈利带过&#xff0c;下面我们就来介绍构建策略时所需的三…

【保姆级教程】使用Mediapipe进行Face Landmark Detection实践和Hand Landmark实践

目录 1 Mediapipe 2 Solutions 3 安装依赖库 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。与资源消耗型的机…

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读 AbstractIntroductionRelated WorkMethodExperimentsConclusions阅读总结 论文标题&#xff1a;Appearance-Motion Memory Consistency Network for Video Anomaly Detection 文章信息&am…

[笔记]ByteBuffer垃圾回收

参考&#xff1a;https://blog.csdn.net/lom9357bye/article/details/133702169 public static void main(String[] args) throws Throwable {List<Object> list new ArrayList<>();Thread thread new Thread(() -> {ByteBuffer byteBuffer ByteBuffer.alloc…

两种经典的现货白银假突破类型

假突破是现货白银市场中一种具有反大众性的市场行为。它通常和一种强势的市场行为突破联系在一起&#xff0c;但是它的方向是和突破完全相反的&#xff0c;识别假突破的类型&#xff0c;有助于降低我们亏损的风险&#xff0c;那如何识别呢&#xff1f;下面我们来介绍两种假突破…

rubymine 如何使用rubymine更新linux的ruby代码

第1步&#xff1a;配置SSH File | Settings | Tools | SSH Configurations 第2步&#xff1a;配置SFTP File | Settings | Build, Execution, Deployment | Deployment 第3步&#xff1a;使用 参考 rubymine remote远程linux同步代码 rubymine remote远程linux 并同步代码…

系列十四(面试)、谈谈你对StackOverflowError的理解?

一、StackOverflowError 1.1、概述 StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 引用类型 实例方法&#xff0c;栈的空间也是有限的&#xff0c;当存储进栈中的容量大于栈的最大容量时&#xff0c;就会报StackOverflowError的错误。 1.2、案例 …

一个网卡能设置(绑定)两个或多个IP

昨天领导问我&#xff0c;一个网卡设置两个IP。我就有点发愣&#xff1a;一个网卡能设置两个IP吗&#xff1f;我倒是见过一个机器插两个网卡&#xff0c;同时支持内网和外网。一个网卡设置两个IP&#xff0c;以谁为准&#xff1f; 上网搜索了一下&#xff0c;还真可以&#xff…

influxdb-cluster集群部署

一.下载安装包 略 二.集群文件配置修改 ip地址服务名称192.168.110.110influxdb,meta192.168.110.111influxdb,meta192.168.110.118meta 1.influxdb-meta.conf配置文件修改 meta至少三个节点修改配置比较简单 hostname "192.168.110.110" dir "/data/…

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex &#xff08;基本互斥锁&#xff09;2. std::recursive_mutex &#xff08;递归互斥锁&#xff09;3. std::timed_mutex &#xff08;限时等待互斥锁&#xff09;4. std::recursive_timed_mutex &#xff08;限时等待…

残差网络学习

参考B站同济子豪兄的Resnet讲解 网络退化&#xff0c;不是梯度消失&#xff08;根本没有开始学习&#xff09;&#xff0c;梯度爆炸&#xff0c;过拟合。 不需要再拟合复杂底层的那个映射了&#xff0c;原来输入的基础上你需要进行哪些偏移哪些修改 残差预测值和真实值的偏差 一…