C语言中的转义字符
- 功能
- 字符型常量
- 组成
- 编程语言
- 作用
- 转义字符使用情况
- 在C语言中实例
在字符集中,含有两种字符。
1.可显示字符:当从键盘上输入这个字符时,显示器上就会显示这个字符。 如:a、b、+等等。
2.控制字符:它们或者在键盘上找不到一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。 这类字符因控制而设计,被称为控制字符。
控制字符(Control Character)是出现于特定的信息文本中,表示某一控制功能的字符。 —百度词条
在C语言中,构成字符常量的控制字符必须使用转义字符表示。
转义字符不属于控制字符;控制字符也不属于转义字符。如果控制字符的定义是非图形的字符,或者对输出设备(打印机、文本终端)有特殊意义的字符,那么针对这些设备的转义字符也是控制字符。但是程序设计用的转义字符是图形字符,因此它们不是控制字符。相反地,大多数ASCII控制字符单独都具有控制功能,因此它们不是转义字符。
转义字符
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。 —百度词条
功能:
转义序列通常有两种功能。第一个是编码一个句法上的实体,如设备命令或者无法被字母表直接表示的特殊数据。第二种功能,也叫字符引用,用于表示无法在当前上下文中被键盘录入的字符(如字符串中的回车符),或者在当前上下文中会有不期望的含义的字符(如C语言字符串中的双引号字符",不能直接出现,必须用转义序列表示)。在后面那种情况,转义序列是一种由转义字符自身和一个被引用的字符组成的一个二合字母(digraph)情形。
字符型常量:
C语言中字符型常量所表示的值是int型所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。
‘A’, ‘\x2f’, ‘\013’;
其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。例如十进制的17用十六进制表示就是
‘\x11’,用八进制表示就是‘\021’; 上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。
组成:
转义字符串(Escape String),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。
比如,要显示小于号(<),就可以写 &It; (此处是LT,我输入L的时候博客上也会显示<,故用大写的i表示)或者 < 。
用实体(Entity)名字的好处是比较好理解,一看lt,大概就猜出是less than的意思,但是其劣势在于并不是所有的浏览器都支持最新的Entity名字。而实体(Entity)编号,各种浏览器都能处理。
提示:实体名称(Entity)是区分大小写的。
备注:同一个符号,可以用“实体名称”和“实体编号”两种方式引用,“实体名称”的优势在于便于记忆,但不能保证所有的浏览器都能顺利识别它,而“实体编号”则没有这种担忧,但它实在不方便记忆。
编程语言:
如HTML转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb转义符、 javascript 转义符等等,还有网址中的百分号。
例如,HTML的& lt; & gt;& amp;& quot;& copy;分别是<,>,&,",©;的转义字符
XML只有5个转义符: & lt; & gt;& amp; & quot; & apos;
作用:
转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当做文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
其实所有编程语言,拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说Html中,<被HTML定义为标签的开始,所以当我们转入<时,HTML就会把它当作为开始,而不是当作一个<来看待。再如PHP 的双引号("),被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。不然PHP就会报错了。
从上面也可以看出转义无非是两种情况:1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。2:用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如html 并不是编程语言,而是标记语言,有些语言只有一种类型 比如shell 脚本语言,这些语言中字符串都不加引号” ” ,或者可以不加引号“ ”,所以有时候需要转义字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。
另外出于网站的安全。在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。这样做可以避免一些别有用心的人利用特殊符号的注入攻击。
转义字符在下面情况使用:
1.某一些特定的字符在编辑语言中被定义为特殊字符,此时需要用转义字符来实现。 例如:c语言中打印“ \” printf("\\");
2.将普通字符作为特殊用途,用来实现某种功能。 例如:C语言中的回车 printf("\n");
c语言中的转义字符的:
回退格(\b) | 使当前行的活跃位置后退一个位置 |
---|---|
换页符(\f) | 使活跃位置跳到下一页的开端 |
换行符(\n) | 使活跃位置跳到下一行的开端 |
回车符 ( \r ) | 使活跃位置返回当前行的开端。 |
水平制表符(\t) | 使活跃位置移动若干个位置(通常是8个) |
垂直制表符(\v) | 使活跃位置换若干行 |
注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。
\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
C语言中实例:
- 如果要打印以下句子:
"\ 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码时,要注意区分数字和数字字符。例如:字符4的ASCII码是52 ,‘4’ 代表字符 4 ,而不是数字4。此外,尽管 ‘\n’和 ‘\xa’ ,’\a’ 和 ‘\007’ 是等价的,但是我们应该尽可能使用 ‘\n’ 和 ‘\a’,而不要用 ‘\xa’ 和 ‘\007’ 。这是因为前者易懂、便于记忆,而且移植性更高。