C语言中的转义字符
在字符集中,有一類字符具有這樣的特性:當從鍵盤上輸入這個字符時,顯示器上就可以顯示這個字符,即輸入什么就顯示什么。這類字符稱為可顯示字符,如a、b、c、$、+和空格符等都是可顯示字符。
另一類字符卻沒有這種特性。它們或者在鍵盤上找不到對應(yīng)的一個鍵(當然可以用特殊方式輸入),或者當按鍵以后不能顯示鍵面上的字符。其實,這類字符是為控制作用而設(shè)計的,故稱為控制字符。
在C語言中,構(gòu)成字符常量的控制字符必須用轉(zhuǎn)義字符表示。轉(zhuǎn)義字符是一種以“\”開頭的字符。例如退格符用'\b'表示,換行符用'\n'表示。轉(zhuǎn)義字符中的'\'表示它后面的字符已失去它原來的含義,轉(zhuǎn)變成另外的特定含義。反斜杠與其后面的字符一起構(gòu)成一個特定的字符。
轉(zhuǎn)義字符是C語言中表示字符的一種特殊形式。轉(zhuǎn)義字符以反斜'\'開頭,后面跟一個字符或一個八進制或十六進制數(shù)表示。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱轉(zhuǎn)義字符。
通常使用轉(zhuǎn)義字符表示ASCII碼字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的單撇號('),用于表示字符串常量的雙撇號(")和反斜杠(\)等。
例如,下面例子printf函數(shù)的格式串中用到的'\n'就是一個轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來表示那些用一般字符不便于表示的控制代碼。
?
常用的轉(zhuǎn)義字符及其含義
?
\ddd ? 三位八進制
\xhh ? 二位十六進制
ASCAII碼范圍表
??數(shù)字 0---9???表示:??48--57
??大寫字母表示:???65---90
??小寫字母表示:???97---122
??NUL??空字符??CR回車????LF換行
從表中可以看出,在C語言中有三種轉(zhuǎn)義字符,它們是:一般轉(zhuǎn)義字符、八進制轉(zhuǎn)義字符和十六進制轉(zhuǎn)義字符。
?
\b、\f、\n、\r、\t,以及?\v?都是輸出設(shè)備控制符。退格符(\b)使當前行的活躍位置后退一個位置。換頁符(\f)使活躍位置跳到下一頁的開端。注:換頁符可用于控制打印機換頁,但不會導(dǎo)致?PC?機的顯示屏換頁。換行符(\n)使活躍位置跳到下一行的開端。回車符 (?\r?)使活躍位置返回當前行的開端。水平制表符(\t)使活躍位置移動若干個位置(通常是8個)。垂直制表符(\v)使活躍位置換若干行。注:\v可用于控制打印機換若干行,但是不會導(dǎo)致PC機的顯示屏換行。
?如果要打印以下句子:?"\ is called 'backslash'."
?我們需要使用如下語句:
printf("\"\\ is called?\'backslash\'.\"");?或者
printf("\"\\ is called?'backslash'.\"");?
注意,在字符串字面量中,無論寫?\'?還是?',輸出都是一樣的。但是,在給字符變量賦值時,一定要寫?\'。例如:?
char ch = ''';??
?
char ch = '\'';??
?
?????\0oo?和?\xhh?是ASCII碼的兩種特殊表示形式。如果想用八進制ASCII碼表示字符,可以在八進制數(shù)前面加上?\?,然后用單引號引起來。例如:
????????????beep = '\007';???????
?打頭的那些0可以省略,也就是說,寫成?'\07'?或者?'\7'?都一樣。無論有沒有打頭的0?,7?都會被當成八進制數(shù)處理。
?????從?C89?開始,C提供了用十六進制表示字符常量的方法:在反斜桿后面寫一個?x?,然后再寫?1?到?3?個十六進制數(shù)字。例如:
????????????nl = '\xa';???????
?????注意:使用ASCII碼時,要注意區(qū)分數(shù)字和數(shù)字字符。例如:字符4的ASCII碼是52?,'4'?代表字符?4?,而不是數(shù)字4。此外,盡管?'\n'和?'\xa'?,'\a'?和?'\007'?是等價的,但是我們應(yīng)該盡可能使用?'\n'?和?'\a',而不要用?'\xa'?和?'\007'?。這是因為前者易懂、便于記憶,而且移植性更高。
1. 一般轉(zhuǎn)義字符
這種轉(zhuǎn)義字符,雖然在形式上由兩個字符組成,但只代表一個字符。常用的一般轉(zhuǎn)義字符為:
\a??\n??\t??\v??\b??\r??\f??\\??\’??\"
細心的讀者可能已經(jīng)發(fā)現(xiàn),轉(zhuǎn)義字符'\\'代表的反斜杠"\"、轉(zhuǎn)義字符’\’’代表的字符"'"和轉(zhuǎn)義字符'\"'代表的字符""",其本身就是可顯示字符,為什么還要對它轉(zhuǎn)義呢?
這是因為它們的原有的字符形式已作它用,其中,單引號用作區(qū)分字符常量的括號,雙引號用作區(qū)分字符串(下面將要介紹字符串)的括號,而反斜杠本身已用來表示轉(zhuǎn)義字符的開頭,因此必須對它們用轉(zhuǎn)義字符重新聲明。
2. 八進制轉(zhuǎn)義字符
它是由反斜杠'\'和隨后的1~3個八進制數(shù)字構(gòu)成的字符序列。例如,'\60'、'\101'、'\141'分別表示字符'0'、'A'和'a'。因為字符'0'、'A'和'a'的ASCII碼的八進制值分別為60、101和141。
字符集中的所有字符都可以用八進制轉(zhuǎn)義字符表示。
如果你愿意,可以在八進制數(shù)字前面加上一個0來表示八進制轉(zhuǎn)移字符。
3. 十六進制轉(zhuǎn)義字符
它是由反斜杠'\'和字母x(或X)及隨后的1~2個十六進制數(shù)字構(gòu)成的字符序列。例如,'\x30'、'\x41'、'\X61'分別表示字符'0'、'A'和'a'。因為字符'0'、'A'和'a'的ASCII碼的十六進制值分別為0x30、0x41和0x61。
可見,字符集中的所有字符都可以用十六進制轉(zhuǎn)義字符表示。
?
由上可知,使用八進制轉(zhuǎn)義字符和十六進制轉(zhuǎn)義字符,不僅可以表示控制字符,而且也可以表示可顯示字符。但由于不同的計算機系統(tǒng)上采用的字符集可能不同,因此,為了能使所編寫的程序可以方便地移植到其他的計算機系統(tǒng)上運行,程序中應(yīng)少用這種形式的轉(zhuǎn)義字符。
?
轉(zhuǎn)義字符的使用
例:
1 void main() 2 { 3 int a,b,c; 4 a=5; b=6; c=7; 5 printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c); 6 }此程序練習(xí)轉(zhuǎn)義字符的使用:
a、b、c分別為整數(shù)5,6,7
調(diào)用printf顯示程序運行結(jié)果:
5
67
56?????7
程 序在第一列輸出a值5之后就是“\n”,故回車換行;接著又是“\t”,于是跳到下一制表位置(設(shè)制表位置間隔為8),再輸出b值6和c 值7;后又是"\n",因此再回車換行;之后又輸出a值5和b值6;再次后"\t"跳到下一制表位置(與上一行的6 對齊),但下一轉(zhuǎn)義字符“\b”又使退回一格,故緊挨著6再輸出c值7。
?
使用轉(zhuǎn)義字符時需要注意以下問題:
1)轉(zhuǎn)義字符中只能使用小寫字母,每個轉(zhuǎn)義字符只能看作一個字符。
2)\v垂直制表和\f換頁符對屏幕沒有任何影響,但會影響打印機執(zhí)行響應(yīng)操作。
3)在C程序中,使用不可打印字符時,通常用轉(zhuǎn)義字符表示。
4)轉(zhuǎn)義字符’\0’表示空字符NULL,它的值是0。而字符'0'的ASCII碼值是48。因此,空字符’\0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII碼值為32而不是0。編程序時,讀者應(yīng)當區(qū)別清楚。
5) 如果反斜線之后的字符和它不構(gòu)成轉(zhuǎn)義字符,則’\’不起轉(zhuǎn)義作用將被忽略。
例如:
printf(“a\Nbc\nDEF\n”);
輸出:
aNbc
DEF
6)轉(zhuǎn)義字符也可以出現(xiàn)在字符串中,但只作為一個字符看待。
例 求下面字符串的長度
“\026[12,m” 長度為6
“\0mn”???長度為0。
?原文地址:http://blog.163.com/sunshine_linting/blog/static/44893323201181325818165/
轉(zhuǎn)載于:https://www.cnblogs.com/junlei/p/3619682.html
總結(jié)
- 上一篇: 云为 | 提供海外 IT 人才派遣、猎头
- 下一篇: HTML5中类jQuery选择器quer