C語言中的轉義字元

2021-07-03 23:17:51 字數 4072 閱讀 7038

在字符集中,有一類字元具有這樣的特性:當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a、b、c、$、+和空格符等都是可顯示字元。

另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵(當然可以用特殊方式輸入),或者當按鍵以後不能顯示鍵面上的字元。其實,這類字元是為控制作用而設計的,故稱為控制字元。

在c語言中,構成字元常量的控制字元必須用轉義字元表示。

轉義字元是一種以「\」開頭的字元。例如退格符用'\b'表示,換行符用'\n'表示。轉義字元中的'\'表示它後面的字元已失去它原來的含義,轉變成另外的特定含義。反斜槓與其後面的字元一起構成乙個特定的字元。

轉義字元是c語言中表示字元的一種特殊形式。

轉義字元以反斜'\'開頭,後面跟乙個字元或乙個八進位制或十六進製制數表示。轉義字元具有特定的含義,不同於字元原有的意義,故稱轉義字元。

通常使用轉義字元表示ascii碼字符集中不可列印的控制字元和特定功能的字元,如用於表示字元常量的單撇號('),用於表示字串常量的雙撇號(")和反斜槓(\)等。

例如,下面例子printf函式的格式串中用到的'\n'就是乙個轉義字元,其意義是「回車換行」。轉義字元主要用來表示那些用一般字元不便於表示的控制**。

常用的轉義字元及其含義

注:1,

\v垂直製表和\f換頁符對螢幕沒有任何影響,但會影響印表機執行響應操作。 

2,\n其實應該叫

回車換行

。換行只是換一行,不改變游標的橫座標;回車只是回到行首,不改變游標的縱座標。 

3,\t 游標向前移動四格或八格,可以在編譯器裡設定 

4,\' 在字元裡(即單引號裡)使用。在字串裡(即雙引號裡)不需要,只要用 ' 即可。效果是一樣的。 

5,\? 其實不必要。只要用 ? 就可以了

(在windows vc6 和tc2 中驗證)。 

\b、\f

、\n、\r

、\t,以及 \v

都是輸出裝置控制符。

退格符(\b

)使當前行的活躍位置後退乙個位置。

換頁符(\f

換行符(回車換行)(\n

)使活躍位置跳到下一行的開端。

回車符 ( \r

)使活躍位置返回當前行的開端。

水平製表符(\t

)使活躍位置移動若干個位置(通常是8個)。

垂直製表符(\v

)使活躍位置換若干行。注:\v

可用於控制印表機換若干行,但是不會導致pc機的顯示屏換行。

如果要列印以下句子: 

"\ 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'

。這是因為前者易懂、便於記憶,而且移植性更高。

從表中可以看出,在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()

此程式練習轉義字元的使用:

a、b、c分別為整數5,6,7

呼叫printf顯示程式執行結果:567

56  7

程式在第一列輸出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

def6)轉義字元也可以出現在字串中,但只作為乙個字元看待。

例 求下面字串的長度

「\026[12,m」 長度為6

「\0mn」 

長度為0。(想想:為什麼不是2)(字串長度計算出來為0,但是所占用的空間為4位元組。

應該是"\0mn"吧,"\0"是字串的結尾,這個字串其實只有"\0",後面的mn不是字串的內容,這其實就是個空字串,只有"\0"佔了乙個位元組的位置,所以長度為1

C語言中的轉義字元

c語言中的轉義字元 在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不...

C語言中的轉義字元

c語言中的轉義字元 在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不...

C語言中的轉義字元

在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不能顯示鍵面上的字元。...