C语言中转义字符

2023-05-16

在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、c、$、+和空格符等都是可显示字符。

另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。其实,这类字符是为控制作用而设计的,故称为控制字符。

在C语言中,构成字符常量的控制字符必须用转义字符表示。转义字符是一种以“\”开头的字符。例如退格符用'\b'表示,换行符用'\n'表示。转义字符中的'\'表示它后面的字符已失去它原来的含义,转变成另外的特定含义。反斜杠与其后面的字符一起构成一个特定的字符。

转义字符是C语言中表示字符的一种特殊形式。转义字符以反斜'\'开头,后面跟一个字符或一个八进制或十六进制数表示。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。

通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号('),用于表示字符串常量的双撇号(")和反斜杠(\)等。

例如,下面例子printf函数的格式串中用到的'\n'就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。

 

常用的转义字符及其含义

 

 

\ddd   三位八进制

\xhh   二位十六进制

ASCAII码范围表

  数字 0---9   表示:  48--57

  大写字母表示:   65---90

  小写字母表示:   97---122

  NUL  空字符  CR回车    LF换行

从表中可以看出,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。

 

\b\f\n\r\t,以及 \v 都是输出设备控制符。退格符(\b)使当前行的活跃位置后退一个位置。换页符(\f)使活跃位置跳到下一页的开端。注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。换行符(\n)使活跃位置跳到下一行的开端。回车符 ( \r )使活跃位置返回当前行的开端。水平制表符(\t)使活跃位置移动若干个位置(通常是8个)。垂直制表符(\v)使活跃位置换若干行。注:\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。

 如果要打印以下句子: "\ is called 'backslash'."

 我们需要使用如下语句:

printf("\"\\ is called \'backslash\'.\""); 或者

printf("\"\\ is called 'backslash'.\""); 

注意,在字符串字面量中,无论写 \' 还是 ',输出都是一样的。但是,在给字符变量赋值时,一定要写 \'。例如: 

char ch = ''';  

 

char ch = '\'';  

 

     \0oo 和 \xhh 是ASCII码的两种特殊表示形式。如果想用八进制ASCII码表示字符,可以在八进制数前面加上 \ ,然后用单引号引起来。例如:

            beep = '\007';       

 打头的那些0可以省略,也就是说,写成 '\07' 或者 '\7' 都一样。无论有没有打头的0 ,7 都会被当成八进制数处理。

     从 C89 开始,C提供了用十六进制表示字符常量的方法:在反斜杆后面写一个 x ,然后再写 1 到 3 个十六进制数字。例如:

            nl = '\xa';       

     注意:使用ASCII码时,要注意区分数字数字字符。例如:字符4ASCII码是52 ,'4' 代表字符 4 ,而不是数字4。此外,尽管 '\n'和 '\xa' ,'\a' 和 '\007' 是等价的,但是我们应该尽可能使用 '\n' 和 '\a',而不要用 '\xa' 和 '\007' 。这是因为前者易懂、便于记忆,而且移植性更高。

 

1. 一般转义字符

这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:

\a  \n  \t  \v  \b  \r  \f  \\  \’  \"

细心的读者可能已经发现,转义字符'\\'代表的反斜杠"\"、转义字符’\’’代表的字符"'"和转义字符'\"'代表的字符""",其本身就是可显示字符,为什么还要对它转义呢?

这是因为它们的原有的字符形式已作它用,其中,单引号用作区分字符常量的括号,双引号用作区分字符串(下面将要介绍字符串)的括号,而反斜杠本身已用来表示转义字符的开头,因此必须对它们用转义字符重新声明。

2. 八进制转义字符

它是由反斜杠'\'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。

字符集中的所有字符都可以用八进制转义字符表示。

如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。

3. 十六进制转义字符

它是由反斜杠'\'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。

可见,字符集中的所有字符都可以用十六进制转义字符表示。

 

由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。

 

转义字符的使用

例:

void main()

{

int a,b,c;

a=5; b=6; c=7;

printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c);

}

 

此程序练习转义字符的使用:

a、b、c分别为整数5,6,7

调用printf显示程序运行结果:

5

67

56     7

程序在第一列输出a值5之后就是“\n”,故回车换行;接着又是“\t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6和c 值7;后又是"\n",因此再回车换行;之后又输出a值5和b值6;再次后"\t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“\b”又使退回一格,故紧挨着6再输出c值7。

 

使用转义字符时需要注意以下问题:

1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。

2)\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。

3)在C程序中,使用不可打印字符时,通常用转义字符表示。

4)转义字符’\0’表示空字符NULL,它的值是0。而字符'0'的ASCII码值是48。因此,空字符’\0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII码值为32而不是0。编程序时,读者应当区别清楚。

5) 如果反斜线之后的字符和它不构成转义字符,则’\’不起转义作用将被忽略。

例如:

printf(“a\Nbc\nDEF\n”);

输出:

aNbc

DEF

6)转义字符也可以出现在字符串中,但只作为一个字符看待。

例 求下面字符串的长度

“\026[12,m” 长度为6

“\0mn”   长度为0。(想想:为什么不是2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中转义字符 的相关文章

随机推荐

  • Kubernetes集群监控方案

    文章目录 前言一 Prometheus是什么 Prometheus简介 xff1a Prometheus的特点 xff1a Prometheus相关组件 xff1a 二 在k8s集群的所有节点上下载所需要的image三 采用daemonse
  • stm32 VBAT通过锂电池实现断电保持电路 不用纽扣电池

    对于一些通过锂电池供电的小型穿戴设备如手表 通过锂电池实现后备电池不断电 电池电源通过4148二极管降压到3 3V提供后备电源 就不需要加纽扣电池了 可以节省空间
  • STM32配置外设时,外设结构体寄存器缺省带来的后果。

    今天在调试定时器 xff0c PWM输入捕获的功能时 xff0c 奇怪的发现 xff0c 在某一处多添加一句语句导致改变了定时器模式的配置 正常情况下 xff0c 我们配置外设的时候 xff0c 都会采用这样的方式 xff1a span c
  • STM32以太网通信-LWIP简介

    LwIP全名 xff1a Light weight IP xff0c 意思是轻量化的TCP IP协议 xff0c 是瑞典计算机科学院 SICS 的Adam Dunkels 开发的一个小型开源的TCP IP协议栈 LwIP的设计初衷是 xff
  • ubuntu笔记本外置显卡开展深度学习(转载)

    来源知乎 xff1a https zhuanlan zhihu com p 102359826
  • Linux 下c语言ftp服务器简单实现

    这个程序转载自http aijiekj blog 163 com blog static 12986678920112321853230 原来的程序没有注释 xff0c 最近这段时间在学习网络编程这块 xff0c 就在网上找了个程序来学习
  • 警告!你的隐私正在被上亿网友围观偷看!

    你的隐私正在被上亿万网友围观偷看 xff01 事情要从一款被推荐到烂的软件说起 Everything 这个软件想必很多同学都有听过 xff0c 是一款非常好用的文件搜索软件 xff0c 很多同学把它设置为开机必启动项之一 简单来说 Ever
  • 工作中遇到的C中Sscanf 函数的用法详解

    1 首先 xff0c 看到sscanf时 xff0c 会想到scanf xff0c 唯一不同的是前者是以固定的字符串为输入源 xff1b 后者是以屏幕为输入源 2 sscanf函数的定义为 int sscanf const char str
  • C 语言中结构体中成员所占内存的大小

    在C99标准中 xff0c 对于内存对齐的细节没有作过多的描述 xff0c 具体的实现交由编译器去处理 xff0c 所以在不同的编译环境下 xff0c 内存对齐可能略有不同 xff0c 但是对齐的最基本原则是一致的 xff0c 对于结构体的
  • 工作中遇到的一些SVN恶心的问题处理方法,解决问题的小妙招来了!---致刚刚参加的工作的青涩的人

    1 如果你已经参加了工作 xff0c 难免而且一定要用户svn xff0c 很多公司都会选择它来管理公司的项目 xff0c 这时懂的svn的用法会让你的工作事半功倍的 相信你一定为遇到上传失败 更新失败 clean up 失败而烦恼 xff
  • 麻将胡牌的算法

    清一色是麻将的种类之一 xff0c 指有一种花色的序数牌组成的胡牌 数字1 9 xff0c 每个数字最多4张牌 xff1b 我们不考虑具体的花色 xff0c 我们只看数字 刻字 xff1a 三张一样的牌 xff1a 111 222 333
  • 进程和线程的区别、相同点

    1 首先是定义 进程 xff1a 是执行中一段程序 xff0c 即一旦程序被载入到内存中并准备执行 xff0c 它就是一个进程 进程是表示资源分配的的基本概念 xff0c 又是调度运行的基本单位 xff0c 是系统中的并发执行的单位 线程
  • ORACLE日期数据类型

    oracle数据类型看起来非常简单 xff0c 但用起来会发现有许多知识点 xff0c 本文是我对ORACLE日期数据类型的一些整理 xff0c 都是开发入门资料 xff0c 与大家分享 xff1a 注 xff1a 由于INTERVAL及T
  • linux中shmget函数

    xfeff xfeff shmget int shmget key t key size t size int flag key 标识符的规则 size 共享存储段的字节数 flag 读写的权限 返回值 xff1a 成功返回共享存储的id
  • linux 中常用的数据库命令

    xfeff xfeff 1 显示数据库 show databases 2 选择数据库 use 数据库名 3 显示数据库中的表 show tables 4 显示数据表的结构 describe 表名 5 显示表中记录 SELECT FROM 表
  • socket编程accept函数返回值的理解

    accept函数返回值成功时返回非负值 xff0c 失败时返回 1 accept函数接受一个客户端请求后会返回一个新的SOCKFD值 xff0c 当有不同的客户端同时有不同请求时 xff0c 会返回不同的SOCKFD的值 这个不同的值和建立
  • 【TEE自学随笔】keystone代码略读(长文多图)

    武大信安在读 xff0c 最近在自学Risc v架构的可信执行环境 本篇内容由队友和我总结而成 xff0c 如有错误欢迎指正交流 keystone是risc v架构的开源tee 利用risc v的pmp来隔离页表 xff0c 进一步缩小了可
  • 二维数组与指针、指针数组、数组指针的用法

    二维数组 和指针 用指针表示二维数组 元素 要用指针处理二维数组 xff0c 首先要解决从存储的角度对二维数组 的认识问题 我们知道 xff0c 一个二维数组 在计算机中存储时 xff0c 是按照先行后列的顺序依次存储的 xff0c 当把每
  • 深剖基类和派生类的虚函数表

    1 当派生类实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数地址不同 xff1b 当派生类不实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数的地址相同 1 派生类重新实
  • C语言中转义字符

    在字符集中 xff0c 有一类字符具有这样的特性 xff1a 当从键盘上输入这个字符时 xff0c 显示器上就可以显示这个字符 xff0c 即输入什么就显示什么 这类字符称为可显示字符 xff0c 如a b c 43 和空格符等都是可显示字