1. 三字母詞
在C語言中有一種三字母詞的說法,trigraph sequences,目前為止有九種三字母詞,如下
??= # ??) ] ??! |
??( [ ??' ^ ??> }??/ / ??< { ??- ~
三字母詞出現的原因是,為了避免以前的老式鍵盤中沒有上面的九種字符
這里還需要注意的是,在用gcc編譯時可能會出現如下錯誤
在編譯時如果不加-trigraphs會出現如下警告warning: trigraph ??/ ignored, use -trigraphs to enable我們需要在編譯時加上-trigraphs選項,而且需要加在最前面。cc -trigraphs -o test test.c
這里我們需要注意的一點就是,當我們看到兩個問號同時出現時,就留意一下三字母詞,避免引起不必要的麻煩,防止出現三字母詞,即想打印出兩個問號時,就使用/?
2. 轉義字符
我們在編寫C程序的時候,會想要打印出某些符號,但是因為這些符號是有特殊含義的,所以經常不能如愿,接下來就是轉義字符了
轉義字符(escape sequence)由一個反斜杠/加上一個或多個其他字符組成。
/?在書寫連續多個問號時使用,防止它們被解釋為三字母詞。
/"用于表示一個字符串常量內部的雙引號。
/'用于表示字符常量‘。
//用于表示一個反斜杠,防止它被解釋為一個轉義序列符。
/a 警告字符。 /b 退格鍵 /f 進紙字符 /n 換行符 /r 回車符 /t 水平制表符 /v 水平制表符 /ddd ddd表示1~3個八進制數字,表示八進制所對應的十進制數對應ASCII對應的字符。 /xddd 與上例類似,只是八進制數換成了十六進制數 3.小例題
這里我們來看一道題目
len = strlen("c:/code/test/ten.c");
這個時候len的結果是15,因為/為當成是一個轉義字符的標識,所以這里/c和/t被分別當成是一個字符
變式1:len = strlen("c://code//test//ten.c");
結果是18,這里//被當成是一個字符,表示一個/,而c和t就被當成是一個字符
變式2:len = strlen("c://code//test//ten.c/123");
結果是19,因為后面的/123,是上文中轉義字符的一種,表示123八進制所對應的十進制數對應的asall碼多對應的字符
變式3:len = strlen("c://code//test//ten.c/023");
這里的結果是還是19,題目沒有把/0作為結束的標識
變式4:len = strlen("c://code//test//0ten.c/023");
這里的結果是12,因為/0在這里被當成是結束的字符串標識,并且不被strlen統計成一個字符
新聞熱點
疑難解答