字符串常量是由什么括起来的字符序列7.3.4转义序列
⼀、程序处理字符集中的每⼀个字符C语⾔⽤了什么特殊表⽰法?
⼆、为什么需要⽤到转义序列?
三、转义序列有哪两种?
四、⼋进制转义序列由什么组成?
五、⼗六进制转义序列由什么组成?
七、转义字符的常量的形式是什么?
六、除转义序列还有什么表⽰字符的特殊表⽰法?字符常量通常是⽤单引号括起来的单个字符。然⽽,⼀些特殊符号(⽐如换⾏符)是⽆法采⽤上述⽅式书写的,因为它们不可见(⾮打印字符),或者⽆法从键盘输⼊。因此,为了使程序可以处理字符集中的每⼀个字符,C语⾔提供了⼀种特殊的表⽰法--转义序列。
转义序列共有两种:字符转义序列和数字转义序列。在3.1节已经见过了⼀部分字符转义序列,表7-5给出了完整的字符转义序列集合
转义序列\a\b\f\r\t\v表⽰常⽤的ASCII控制字符,转义序列\n表⽰ASCII码的回⾏符,转义序列\\允许字符常量或字符串包含字符\,转义序列\'允许字符常量包含字符'。⽽转义序列\“则允许字符串包含字符”,转义序列\?很少使⽤。
字符转义序列使⽤起来很容易,但是它们有⼀个问题:转义序列列表没有包含所有⽆法打印的ASCII字符,只包含了最常⽤的字符。字符转义序列也⽆法⽤于表⽰基本的128个ASCII字符以外的字符。数字转义序列可以表⽰任何字符,所以它可以解决上述问题。
为了把特殊字符书写成数字转义序列,⾸先需要在类似附录E那样的表中查字符的⼋进制或⼗六进制值。
例如,某个ASCII码转义字符(⼗进制值为27)对应的⼋进制值33,对应⼗六进制1B。上述⼋进制或⼗六进制码可以⽤来书写转义序列。
⼋进制转义序列由字符\和跟随其后的⼀个最多含有三位数字的⼋进制数组成。(此数必须表⽰为⽆符号字符,所以最⼤值通常是⼋进制的377。)例如,可以将转义字符写成\33或\033。跟⼋进制常量不同,转义序列中的⼋进制数不⼀定要⽤0开头。
⼗六进制转义序列由\x和跟随其后的⼀个⼗六进制数组成。虽然标准C对于⼗六进制数的位数没有限制,
但必须表⽰成⽆符号字符(因此,如果字符长度是8位,那么⼗六进制数的值不能超过FF)。若采⽤这种表⽰法,可以把转义字符写成\x1b或\x1B的形式。字符x必须⼩写,但是⼗六进制的数字(例如b)不限⼤⼩写。
作为字符常量使⽤时,转义序列必须⽤⼀对单引号括起来。例如,表⽰转义字符的常量可以写成'\33'(或'\x1b')的形式。转义序列可能有点隐晦,所以采⽤#define的⽅式给他们命名通常是个不错的注意:
#define ESC '\33' \*ASCII escape character(转义字符)*
正如3.1节看到的那样,转义序列也可以嵌在字符串中使⽤。
转义序列不是唯⼀⼀种⽤于表⽰字符的特殊表⽰法。三字符序列(25.3)提供了⼀种表⽰字符#、[、\、]、^、{、|、}和~的⽅法,这些字符在⼀些国家的键盘上是打不出来的。C99增加了通⽤字符名。通⽤字符名跟转义序列相似,不同之处在于通⽤字符名可以⽤在标识符中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论