C語言中的字符串和轉義字符

C語言中的字符串

咱們知道,c語言中的數據類型有short、int、long、char、float、double六種,可是沒有字符串類型,若是咱們要表達一串字符那麼應該怎麼作呢?
好比abc咱們能夠表示爲"abc",字符串能夠放入數組:數組

char arr1[] = "abc";
    char arr2[] = { 'a','b','c' };
    printf("arr1 = %s\n", arr1);
    printf("arr2 = %s\n", arr2);

可見,有兩種表示形式,那麼這兩種輸出的結果是否相同,且看:
C語言中的字符串和轉義字符
可見arr2的結果除了abc還另外出現了燙燙燙...相似於亂碼的東西。緣由是,arr1中的"abc"---'a','b','c','\0',最後一個的\0是一個轉義字符,是字符串的結束標誌,其值是0,在計算字符串長度時\0是結束標誌,不能算字符串內容,而arr2中則沒有\0的表示。
修改一下代碼,給arr2加上'\0':ide

char arr1[] = "abc";
    char arr2[] = { 'a','b','c','\0'};
    printf("arr1 = %s\n", arr1);
    printf("arr2 = %s\n", arr2);

輸出結果徹底相同:
C語言中的字符串和轉義字符
接下來打印一下arr2不加'\0'時的兩者的長度,看是否相同:code

char arr1[] = "abc";
    char arr2[] = { 'a','b','c'};
    printf("%d\n", strlen(arr1)); 
    printf("%d\n", strlen(arr2));

輸出結果:
C語言中的字符串和轉義字符
其中arr1的結果毋庸置疑,那麼arr2的結果爲何是15呢,緣由就是由於arr2沒有定義'\0',使得arr2的長度是一個隨機值 即arr2:a b c .......直到遇到\0。
若是再給arr2加上‘\0’:blog

char arr1[] = "abc";
    char arr2[] = { 'a','b','c','\0'};
    printf("%d\n", strlen(arr1)); 
    printf("%d\n", strlen(arr2));

輸出結果:
C語言中的字符串和轉義字符
長度也就徹底同樣了。字符串

C語言中的轉義字符

有這麼一個路徑:c:\test\32\test.c,如今咱們要讓它在控制檯顯示出來,應該怎麼作呢?
直接使用雙引號括住:it

printf("%s\n", "c:\test\32\test.c");

(Note:c語言中%d打印整型, %c打印字符,%s打印字符串, %f打印浮點型數字==小數,%p以地址的形式打印, %x打印十六進制數字,%lf打印雙精度浮點數... )
結果以下:
C語言中的字符串和轉義字符
可見,與咱們所須要的有很大的差異,緣由是‘\’使得‘\’+‘後面的字符’構成了一個轉義字符,即\t---水平製表符,\32---八進制數字32,咱們再來看一下這串內容的長度:table

printf("%d\n", strlen("c:\test\32\test.c"));

C語言中的字符串和轉義字符
長度爲13,原本應該是17的,但倒是13,緣由就是由於‘\’+‘後面的字符’構成的轉義字符獨佔一位,即\t是一位,\32是一位,\t又是一位,如今再數一下,正好13位。
若是咱們想要完美的輸出c:\test\32\test.c這串字符的話,就須要在‘\’的前面再加上一個‘\’,防止其和其後面的字符被解釋爲一個轉義序列符,咱們修改一下代碼:class

printf("%s\n", "c:\\test\\32\\test.c");

輸出結果:
C語言中的字符串和轉義字符
很完美,再看一下長度:test

printf("%d\n", strlen("c:\\test\\32\\test.c"));

輸出結果:
C語言中的字符串和轉義字符
徹底正確,因此,咱們在輸出帶有‘\’的字符串時,須要在‘\’前再加上一個‘\’來防止被誤認爲是一個轉義字符而影響輸出結果。
常見的轉義字符:亂碼

轉義字符 意義
\a 警告字符
\b 退格符
\f 換頁
\r 回車
\n 換行符
\t 水平製表符
\v 垂直製表符
\' 單引號
\" 雙引號
\ 反斜槓
\ddd ddd表示1-3個八進制數字
\xdd dd表示2個十六進制數字
相關文章
相關標籤/搜索