C语言中的转义字符

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

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

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

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

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

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

常用的转义字符及其含义

转义字符    意义       ASCII码值(十进制)

\a           响铃(BEL)    007

\b          退格(BS) ,将当前位置移到前一列    008

\f           换页(FF),将当前位置移到下页开头    012

\n          换行(LF) ,将当前位置移到下一行开头    010

\r           回车(CR) ,将当前位置移到本行开头    013

\t           水平制表(HT) (跳到下一个TAB位置)    009

\v          垂直制表(VT)    011

\\          代表一个反斜线字符''\'    092

\'          代表一个单引号(撇号)字符    039

\"         代表一个双引号字符    034

\0        空字符(NULL)    000

\ddd    1到3位八进制数所代表的任意字符    三位八进制

\xhh    1到2位十六进制所代表的任意字符    二位十六进制

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

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。

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

由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便

地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。

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

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”   长度为1。(想想:为什么不是2)

c语言分号的转义字符,C语言中的转义字符 - osc_9gm4ypss的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. 约瑟夫环c语言计蒜客链表,约瑟夫环的故事 - osc_3n35hvex的个人空间 - OSCHINA - 中文开源技术交流社区...

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading. ...

  2. c语言n个测试用例0为结束,编写测试用例 - osc_4l0h8in9的个人空间 - OSCHINA - 中文开源技术交流社区...

    软件测试用例: 软件测试用例就是指导你执行测试,帮助你证明软件功能或发现软件缺陷的一种说明. 可以总结为:每一个测试点的数据设计的步骤设计. 微信红包用例? 用例编号:HB_001 功能模块:发送红包 ...

  3. java影像出租面向对象,Java中的面向对象 - zhiruochujian的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现. 对象就是将函数,属性的一种封装.用人们思考习惯的方式思考问题. 如何自定义类 修饰符 类名{ //成员变量 修饰 ...

  4. ios 图像坐标系_iOS中理解坐标系 - Megan_zhou的个人空间 - OSCHINA - 中文开源技术交流社区...

    坐标.点和像素之间的微妙转换也可能降低绘制性能,导致线条和文字模糊.观察以下代码: CGContextSetLineWidth(context, 3.); // 绘制从坐标{10, 100}到{200 ...

  5. php里运行js,在PHP 中运行JS - mickelfeng的个人空间 - OSCHINA - 中文开源技术交流社区...

    这天去zend网站上逛了逛, 看到一个monkeyspider 的标签, http://devzone.zend.com/article/4704-Using-JavaScript-in-PHP-wi ...

  6. java实现自举_实现语言的自举 - 沙枣的个人空间 - OSCHINA - 中文开源技术交流社区...

    几乎所有的语言项目,其核心都是用更底层的语言写的. 底层语言大部分是 C,C++,而扩展这门语言的核心,就要用另外一种语言 去写.这给语言设计者较大的挑战. 开发语言必须具备底层语言的编写能力,而为了 ...

  7. 在C语言中数据耦合例子,耦合性 内聚加实例 - osc_yip56055的个人空间 - OSCHINA - 中文开源技术交流社区...

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

  8. 直白点理解c 语言中的循环体,反射机制 小小谈 - osc_nnbkiac5的个人空间 - OSCHINA - 中文开源技术交流社区...

    反射机制(Reflection) [TOC] 写在前面 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11082012.html 这里是Oberon 本文 ...

  9. c语言ok未定义标识符,C语言中宏的相关知识 - osc_y7ckpzr9的个人空间 - OSCHINA - 中文开源技术交流社区...

    2019/04/27 16:02 1.宏的定义:宏定义就是预处理命令的一种,它允许用一个标识符来表示一个字符串.格式如下: #define name(宏名) stuff(字符串) 本质就是使用宏名去替 ...

最新文章

  1. 弹性布局,自动按比例居中
  2. ShaderLab Syntax 基本语法
  3. js在firefox中的问题
  4. 一文解读:如何从 0 到 1 打造小程序爆款裂变
  5. SQL 除去数字中多于的0
  6. git仓库创建后,由主支变成开发分支
  7. 第34课 生命周期与素数 《小学生C++趣味编程》
  8. LeetCode 445 分发饼干
  9. Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
  10. 路飞学城django
  11. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  12. 正则表达式判断是否为数字
  13. 定时任务cron表达式详解
  14. java jdom格式,java使用jdom生成xml格式文件
  15. 软件测试之TCP、UPD协议详解
  16. 基于labview的虚拟示波器
  17. win10清除磁盘写保护
  18. mybatis <where> <choose>标签
  19. 坚定推动DDD落地的企业,70%代码效率翻倍了!
  20. nodebb部署心路历程【加上踩坑合集】

热门文章

  1. 什么是车载智能系统测试?
  2. 学习C语言|CSDN的第0天 + 我是如何走上编程之路的
  3. 人工智能+音乐的探索:从洛天依到小冰初窥歌唱合成
  4. 19.Docker技术入门与实战 --- 安全防护与配置
  5. 8月1日国人常用免费杀软BT病毒库测试
  6. XCTF夏令营选拔赛TooooomanyRSA题解
  7. HNUCM2022年天梯赛选拔赛第1场
  8. Bebug与Release版本
  9. 入坑机器学习:一,绪论
  10. 匿名内部类在开发中当做参数传递