我的思想随着这些闪耀的绿叶而闪耀;我的心灵因了这日光的抚触而歌唱;

关于C语言中的转义字符

C语言 致远 141℃ 0评论

所有的ASCII码都可以使用转义字符来表示,其中包括了常用的打印字符和一些具有特殊功能的非打印字符。
在C语言中,打印字符,如字母、数字、空格等字符,可以直接使用引号包含这些字符即可构成字符或字符串数据。
对于非打印字符,在引号中则必须使用转移字符来进行表示。

基本形式

首先转义字符和普通字符数据一样,只能够出现在单引号或者双引号中。并且转义字符都以\开头。
转义字符有三种表示方式,分别是
1. 8进制 \加8进制数字
2. 16进制 \x加16进制数字
3. 特殊转义字符 \加有特殊意义的符号

注意:转义字符不存在10进制的书写形式。

数字转义

数字转义字符只能使用8进制和16进制。
每个字符的转义数值分别对应了其ASCII码的值。
例如:

字符 转义字符(8进制) 转义字符(16进制)
‘a’ ‘\141’ ‘\x61’
‘+’ ‘\53’ ‘\x’
‘0’ ‘\60’ ‘\x30’

所有的ASCII字符都可以使用这种方式进行表示。
在C语言中,如果想用ASCII码值的10进制方式输入字符。可以使用10进制整数直接给字符变量赋值,例如char a=97;同样这种方式能够输入所有的ASCII字符,但是这种方式只能对单个字符变量进行赋值,并不能够对整个字符串进行一次性赋值。

符号转义

打印字符,可以使用字符本身和数字转义两种方式表示。
非打印字符,除了使用数字转义的方式表示外,也有另一种表示方式,特殊符号转义。
这种转义方式由反斜杠和一个打印字符组成,用来表示一个非打印字符,常用相关的字符如下。

转义字符 意义 ASCII码值(10进制) 缩写来源
\a 响铃(BEL) 007 Alert
\b 退格(BS) ,将当前位置移到前一列 008 Backspace
\f 换页(FF),将当前位置移到下页开头 012 form feed
\n 换行(LF) ,将当前位置移到下一行开头 010 line feed
\r 回车(CR) ,将当前位置移到本行开头 013 return
\t 水平制表(HT) (跳到下一个TAB位置) 009 Tab
\v 垂直制表(VT) 011 vertical tab

上面的字符中,需要特别注意三个字符。

\v垂直制表符
在Windows控制台中,垂直制表符并不能够在控制台中直接打印想要的制表效果,而是以一个特殊的字符来表示。
在Linux环境下,垂直制表符能够正常的实现垂直制表的效果。

\n\r换行和回车
在日常的使用中,我们经常习惯性的将换行和回车等同起来。换行就是回车,回车就是换行。或者说,回车用来换行,这里的回车更多的是指键盘上的Enter键。
实际上,回车和换行是两个不同的概念。
这个字符的产生和这个东西有关Teletype_Model_33

它们的由来网上是这么流传的:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
– Unix系统里,每行结尾只有“<换行>”,即“\n”;
– Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;
– Mac系统里,每行结尾是“<回车>”。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

从上面的文字中可以看出,实际上换行的功能本应该是由\n\r共同来完成的,后来在计算机中不同的系统出现了不同的规定。
但是我们知道在C语言中,换行的操作使用的是\n,但是上面的文字说在Windows下换行使用的是\n\r。这是不是有矛盾呢。
实际上并没有。
在Windows控制台下运行C语言,我们知道要换行时使用\n便能完成操作。但是当要向文件输出数据时,如果我们要实现换行,在代码中我们仍然可以使用\n来进行换行的操作。但是在文件实际的存储数据中,换行使用的是\n\r

简单说一下,在C语言中,如果\r后输出其他字符的话,之前在本行开头输出的字符将会被覆盖。
另外,从理论上讲,在Linux环境下\v\r组合也能够用于换行,但是在实际应用中并不会这样使用。

总结

所有转义字符和意义总结如下表

转义字符 意义 ASCII码值(10进制)
\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
\? 代表一个问号 063
\0 空字符(NULL) 000
\ooo 1到3位八进制数所代表的任意字符 三位八进制
\xhh 1到2位十六进制所代表的任意字符 二位十六进制

转载请注明:致远博客 » 关于C语言中的转义字符

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址