三字母词和转义字符
1. 三字母詞
在C語(yǔ)言中有一種三字母詞的說(shuō)法,trigraph sequences,目前為止有九種三字母詞,如下
??=? ? ? ? ? ? ?? #??? ? ? ? ? ? ? ? ??)????? ? ? ? ]?????? ? ? ? ?? ? ??! ? ? ? ? ? |??? ? ??
??( ? ? ? ? ?? ? ? [??????? ? ? ? ?? ? ??' ? ? ? ? ?? ^??? ? ? ? ? ? ? ? ??> ? ? ? ?? }
??/ ? ? ? ?? ? ? ? \?????? ? ? ? ? ? ?? ??<??? ? ? ? {????? ? ? ? ? ? ?? ??- ? ? ? ? ? ~
三字母詞出現(xiàn)的原因是,為了避免以前的老式鍵盤(pán)中沒(méi)有上面的九種字符
這里還需要注意的是,在用gcc編譯時(shí)可能會(huì)出現(xiàn)如下錯(cuò)誤
在編譯時(shí)如果不加-trigraphs會(huì)出現(xiàn)如下警告
warning: trigraph ??/ ignored, use -trigraphs to enable
我們需要在編譯時(shí)加上-trigraphs選項(xiàng),而且需要加在最前面。
cc -trigraphs -o test test.c
這里我們需要注意的一點(diǎn)就是,當(dāng)我們看到兩個(gè)問(wèn)號(hào)同時(shí)出現(xiàn)時(shí),就留意一下三字母詞,避免引起不必要的麻煩,防止出現(xiàn)三字母詞,即想打印出兩個(gè)問(wèn)號(hào)時(shí),就使用\?
2. 轉(zhuǎn)義字符
我們?cè)诰帉?xiě)C程序的時(shí)候,會(huì)想要打印出某些符號(hào),但是因?yàn)檫@些符號(hào)是有特殊含義的,所以經(jīng)常不能如愿,接下來(lái)就是轉(zhuǎn)義字符了
轉(zhuǎn)義字符(escape sequence)由一個(gè)反斜杠\加上一個(gè)或多個(gè)其他字符組成。
\?在書(shū)寫(xiě)連續(xù)多個(gè)問(wèn)號(hào)時(shí)使用,防止它們被解釋為三字母詞。
\"用于表示一個(gè)字符串常量?jī)?nèi)部的雙引號(hào)。
\'用于表示字符常量‘。
\\用于表示一個(gè)反斜杠,防止它被解釋為一個(gè)轉(zhuǎn)義序列符。
| \a | 警告字符。 |
| \b | 退格鍵 |
| \f | 進(jìn)紙字符 |
| \n | 換行符 |
| \r | 回車(chē)符 |
| \t | 水平制表符 |
| \v | 水平制表符 |
| \ddd | ddd表示1~3個(gè)八進(jìn)制數(shù)字,表示八進(jìn)制所對(duì)應(yīng)的十進(jìn)制數(shù)對(duì)應(yīng)ASCII對(duì)應(yīng)的字符。 |
| \xddd | 與上例類(lèi)似,只是八進(jìn)制數(shù)換成了十六進(jìn)制數(shù) |
3.小例題
???? 這里我們來(lái)看一道題目
len = strlen("c:\code\test\ten.c");
這個(gè)時(shí)候len的結(jié)果是15,因?yàn)閈為當(dāng)成是一個(gè)轉(zhuǎn)義字符的標(biāo)識(shí),所以這里\c和\t被分別當(dāng)成是一個(gè)字符
變式1:len = strlen("c:\\code\\test\\ten.c");
結(jié)果是18,這里\\被當(dāng)成是一個(gè)字符,表示一個(gè)\,而c和t就被當(dāng)成是一個(gè)字符
變式2:len = strlen("c:\\code\\test\\ten.c\123");
結(jié)果是19,因?yàn)楹竺娴腬123,是上文中轉(zhuǎn)義字符的一種,表示123八進(jìn)制所對(duì)應(yīng)的十進(jìn)制數(shù)對(duì)應(yīng)的asall碼多對(duì)應(yīng)的字符
變式3:len = strlen("c:\\code\\test\\ten.c\023");
這里的結(jié)果是還是19,題目沒(méi)有把\0作為結(jié)束的標(biāo)識(shí)
變式4:len = strlen("c:\\code\\test\\0ten.c\023");
這里的結(jié)果是12,因?yàn)閈0在這里被當(dāng)成是結(jié)束的字符串標(biāo)識(shí),并且不被strlen統(tǒng)計(jì)成一個(gè)字符
總結(jié)
- 上一篇: “我观圣人意”下一句是什么
- 下一篇: C语言volatile关键字详解