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 字元(NULL) |
000 |
\ddd |
1到3位八位元所代表的任一字元 |
三位八進位 |
\xhh |
1到2位十六進位所代表的任一字元 |
二位十六進位 |
從表中可以看出,在C語言中有三種逸出字元,它們是:一般逸出字元、八進位逸出字元和十六進位逸出字元。
一般逸出字元
這種逸出字元,雖然在形式上由兩個字元組成,但只代表一個字元。常用的一般逸出字元為:
\a \n \t \v \b \r \f \\ \’ \"
細心的讀者可能已經發現,逸出字元'\/'代表的反斜線"/"、逸出字元’\’’代表的字元"'"和逸出字元'\"'代表的字元""",其本身就是可顯示字元,為什麼還要對它轉義呢?
這是因為它們的原有的字元形式已作它用,其中單引號用作區分字元常量的括弧,雙引號用作區分字串(下面將要介紹字串)的括弧,而反斜線本身已用來表示逸出字元的開頭,因此必須對它們用逸出字元重新聲明。
八進位逸出字元
它是由反斜線'/'和隨後的1~3個八位元字構成的字元序列。例如,'\60'、'\101'、'\141'分別表示字元'0'、'A'和'a'。因為字元'0'、'A'和'a'的ASCII碼的八進位值分別為60、101和141。字元集中的所有字元都可以用八進位逸出字元表示。如果你願意,可以在八位元字前面加上一個0來表示八進位轉移字元。
十六進位逸出字元
它是由反斜線'/'和字母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 字元NULL,它的值是0。而字元'0'的ASCII碼值是48。因此,Null 字元’\0’不是字元0。另外,Null 字元不等於空白字元,空白字元的ASCII碼值為32而不是0。編程式時,讀者應當區別清楚。
- 5) 如果反斜線之後的字元和它不構成逸出字元,則’\’不起轉義作用將被忽略。