C语言中的转义字符

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

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

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

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

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

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


常用的转义字符及其含义

从表中可以看出,在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。

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


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


转义字符的使用

例:

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    

程序在第一列输出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”