字串的長度是指串中所含字元的個數
注意點1:
char test=」12345」;
上面test陣列的長度是6!//因為還又乙個』\0』放在這個陣列最後。
但是test字串的長度是5!
所以就會這樣
char test=「12345」;
num=strlen(test);
printf(「sizeof=%d\n」,sizeof(test)/sizeof(test[0]));
printf(「strlen=%d」,num);
輸出為:
sizeof=6
strlen=5
字串中的\轉義字元怎麼辦?(注意轉義字元中的八進位制,十六進製制啥的和我們定義乙個變數賦值它八進位制和十六進製制是有點差別的)
顯然,\字元後面的一些東西,我們需要根據情況來看。
經過測試知道\後面加上數字,編譯器的處理有以下規律:
1)\後緊跟的1-3個數字要是都是 <8的整數,那麼我們就把1-3個數字看成乙個八進位制的整體。然後將它轉換為十進位制,然後就能找到這個ascii碼對應的字元。(注意\777這麼大的八進位制,也是可以的,雖然它轉換為十進位制後超出了我們的ascii碼表的範圍,只是像這樣的,我們就比較難知道那個八進位制對應是什麼字元)
測試**:
問題\x和\x12和\x的區別
\後面接數字
總結1)
首先)編譯器會檢查是不是在八進位制的範圍內,要是在(0-7)的字元表示,那麼就會將這個八進位制識別(八進位制)
注意:編譯器識別這個八進位制,可以識別的是比如0-7,00-07,10-77,000-007,100-777(最後這個有點特殊)(也就是說,編譯器不貪多,也不怕少,識別到0個八進位制的,那我就把那乙個看成十進位制就好了,能識別1個是八進位制的也好,2,3個也好,但是給我第4個位也可以理解為八進位制的,我也不要)
因為八進位制400對應的十進位制是256了,比擴充套件的ascii碼都大1,產生了溢位。
對應這種溢位處理(其實也是編譯器識別八進位制的方法):
編譯器先將八進位制轉換為二進位制,取這些二進位制後面8位。
不足8位,比如078對應的二進位制是000 111那麼就在高位補0,對應的二進位制為00 000 111
超過8位,比如5578對應的二進位制是101 101 111,取二進位制低位的8個位,對應01 101 111(對應的十進位制是55,對應字元7)
其次)要是發現,超出了八進位制的範圍,那就識別為十進位制(十進位制)
顯然,只有兩種可能,那就是\8和\9
因為比如,\09,由於編譯器,不貪多,它識別到0後面的是十進位制,他就只給你指識別前面的\0為八進位制,對應於十進位制0(然後把字串都結尾了),9就不小心被他給捨棄了。
\009也是一樣的,只是是識別的是\00八進位制,還是和\09有區別,但是不好意思,它對應的十進位制還是0,歷史總是驚人的相似,又捨棄了9
\後面接字母x或x (十六進製制和其他)
\後面接著a,b…z或a,b…z
十六進製制的情況是:
小寫的x才行,比如\xa和\xa是一樣的,注意:在十六進製制中大小寫a-z都是可以的!
大寫的x不行,會顯示警告:警告原因:編譯器不認識『\x』,然後編譯器將\轉義給捨棄了,不看它了?反正測試似乎是這樣
所以,應該是的\被捨棄了,字串變成了1234xa這個六個組成
ps:1)此外,x後面第乙個只能跟16進製制的,比如這樣就肯定會報錯
2)x後面跟著**1-n(過分,這比8進製過分多了,它就能作死的吃)**個應該是十六進製制的,當然,碰到不是16進製制的,編譯器會和處理8進製一樣,不貪多。但是如果,x後面緊接著的第乙個就不是十六進製制,這就不能忍了!比如還是上一條所說。
具體的一般情況:
顯然,是和處理8進製一樣的套路,我們大膽猜測1234\x00#的長度還是4(事實證明也是)
注意點:
一樣的輸出
還是一樣的輸出
此外溢位也是:
這種情況的溢位處理,首先將十六進製制轉換為二進位制,其中的低8位
不足8位,左邊補二進位制0,比如1234\x7g
它的十六進製制是\x7表示的二進位制是0111 編譯器對它高位進行補0,最後是0000 0111
(十進位制為7,對於字元(響鈴),請仔細聽)
超過8位,取低位的8位,比如1234\xff53g
十六進製制是\xff53表示的二進位制1111 1111 0101 0011,編譯器取這個的低位的8位
也就是0101 0011(十進位制對應的83,對應的字元s)
python字串選擇題 Python字串練習題
1.輸入乙個月份數字,返回對應月份名稱,此問題的ipo模式是 輸入 輸入乙個表示月份的數字 1 12 處理 利用字串基本操作實現該功能 輸出 輸出對應的月份名稱 例項.py month 一月份二月份三月份四月份五月份六月份七月份八月份九月份十月份十一月十二月 for i in range 12 插入...
mysql選擇題 MySQL 選擇題(三)
單選題 1.在正規表示式中,匹配任意乙個字元的符號是 a b c d 正確答案 a 2.條件年齡between 15 and 35表示年齡在15至35之間,且 a 不包括15歲和35歲 b 包括15歲但不包括35歲 c 包括15歲和35歲 d 包括35歲但不包括15歲 正確答案 c 3.mysql安...
shell題庫選擇題 Linux選擇題題庫
1 下列哪個選項不是linux所支援的?a 多使用者 b 超程序 c 可移植 d 多程序 2 linux就是所謂的 free softwrae 這個 free 的含義是什麼?a linux不需要付費 b linux發行商不能向使用者收費 c linux可自由修改和發布 d 只有linux的作者才能向...