1. 程式人生 > >C語言中的轉義字符

C語言中的轉義字符

left 轉變 tle 括號 def char asc log 轉義

C語言中的轉義字符

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

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

在C語言中,構成字符常量的控制字符必須用轉義字符表示。轉義字符是一種以“\”開頭的字符。例如退格符用‘\b‘表示,換行符用‘\n‘表示。轉義字符中的‘\‘表示它後面的字符已失去它原來的含義,轉變成另外的特定含義。反斜杠與其後面的字符一起構成一個特定的字符。

轉義字符是C語言中表示字符的一種特殊形式。轉義字符以反斜‘\‘開頭,後面跟一個字符或一個八進制或十六進制數表示。轉義字符具有特定的含義,不同於字符原有的意義,故稱轉義字符。

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

例如,下面例子printf函數的格式串中用到的‘\n‘就是一個轉義字符,其意義是“回車換行”。轉義字符主要用來表示那些用一般字符不便於表示的控制代碼。

常用的轉義字符及其含義

技術分享圖片

\ddd 三位八進制

\xhh 二位十六進制

ASCAII碼範圍表

數字 0---9 表示: 48--57

大寫字母表示: 65---90

小寫字母表示: 97---122

NUL 空字符 CR回車 LF換行

從表中可以看出,在C語言中有三種轉義字符,它們是:一般轉義字符、八進制轉義字符和十六進制轉義字符。

\b、\f\n\r\t,以及 \v 都是輸出設備控制符。退格符(\b)使當前行的活躍位置後退一個位置。換頁符(\f)使活躍位置跳到下一頁的開端。註:換頁符可用於控制打印機換頁,但不會導致 PC 機的顯示屏換頁。換行符(\n)使活躍位置跳到下一行的開端。回車符 ( \r )使活躍位置返回當前行的開端。水平制表符(\t

)使活躍位置移動若幹個位置(通常是8個)。垂直制表符(\v)使活躍位置換若幹行。註:\v可用於控制打印機換若幹行,但是不會導致PC機的顯示屏換行。

如果要打印以下句子: "\ is called ‘backslash‘."

我們需要使用如下語句:

printf("\"\\ is called \‘backslash\‘.\""); 或者

printf("\"\\ is called backslash.\"");

註意,在字符串字面量中,無論寫 \‘ 還是 ,輸出都是一樣的。但是,在給字符變量賦值時,一定要寫 \‘。例如:

char ch = ‘‘;

char ch = ‘\‘‘;

\0oo\xhhASCII碼的兩種特殊表示形式。如果想用八進制ASCII碼表示字符,可以在八進制數前面加上 \ ,然後用單引號引起來。例如:

beep = ‘\007‘;

打頭的那些0可以省略,也就是說,寫成 ‘\07‘ 或者 ‘\7‘ 都一樣。無論有沒有打頭的07 都會被當成八進制數處理。

C89 開始,C提供了用十六進制表示字符常量的方法:在反斜桿後面寫一個 x ,然後再寫 1 到 3 個十六進制數字。例如:

nl = ‘\xa‘;

註意:使用ASCII碼時,要註意區分數字數字字符。例如:字符4ASCII碼是52‘4‘ 代表字符 4 ,而不是數字4。此外,盡管 ‘\n‘‘\xa‘‘\a‘‘\007‘ 是等價的,但是我們應該盡可能使用 ‘\n‘‘\a‘,而不要用 ‘\xa‘‘\007‘ 。這是因為前者易懂、便於記憶,而且移植性更高。

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 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

DEF

6)轉義字符也可以出現在字符串中,但只作為一個字符看待。

例 求下面字符串的長度

“\026[12,m” 長度為6

“\0mn” 長度為0。(想想:為什麽不是2

C語言中的轉義字符