1 字元串的概念
1.1 字元數組與字元串
1.2 小秘密
2 字元串字面量
3 字元串的長度
4 小結
字元串是有序字元的集合
字元串是程式的基本元素之一
c 語言中沒有字元串的概念
c 語言中通過特殊的字元數組模拟字元串
c 語言中的字元串是以 ‘\0’ 結尾的字元數組
在 c 語言中,雙引号引用的單個或多個字元是一種特殊的字面量
存儲于程式的全局隻讀存儲區
本質為字元數組,編譯器自動在結尾加上 ‘\0’ 字元
下一個下面哪些是字元串的定義?
我們現在分析一下,字元串就是一個字元數組,在末尾加上 ‘\0’。
數組 ca 是一個字元數組,沒有以 ‘\0’ 結尾,是以不是字元串;
sa 是以 ‘\0’ 結尾的字元數組,是以是字元串;
“hello world!” 是一個字元數組,我們用一個字元數組去初始化 字元數組 ss,這在 c 語言中是合法的,編譯器會自動在 “hello world!” 末尾加上 ‘\0’ ,是以 ss 是字元串;
用一個指針去指向字元數組,我們不是經常這麼幹嘛,str 是字元串。
下面我們用編譯器驗證一下我們的分析:
編譯運作結果如下:
可以看到 ca 列印的結果是不對的,sa,ss,str 列印的結果是完全正确的,是以 ca 是一個字元數組,sa,ss,str 是字元串。
字元串字面量本質是一個數組
字元串面量可以看作常量指針
字元串字面量中字元不可改變(因為存儲在全局隻讀存儲區)
字元串字面量至少包含一個字元(至少包含 ‘\0’)
字元串字面量是一個字元數組,比如 “hello world!” 就是一個無名的字元數組
請看下面的表達式合法嗎?
上面的寫法看起來都比較奇怪,對一個字元串字面量進行下标運算,和整數進行加法運算,對空字元串解引用,我們用編譯器驗證一下:
對于上面的結果,“abc”[0] 等于取字元串第一個字元,*(“123” + 1); 是取字元串第 2 個字元,*"" 是對空字元串第一個字元解引用,,第一個字元是 ‘\0’,我們列印的是 %p,是列印對應的ascii 碼, ‘\0’ 對應的 ascii 是 0。 字元串的是以 ‘\0’ 作為結束标志的, ‘\0’ 之後的内容不屬于該字元串,是以 printf("%s\n", “hello\0hello”); 語句會列印出 hello
字元串的長度就是字元串所包含字元的個數
字元串長度指的是第一個 ‘\0’ 字元前出現的字元個數
通過 ‘\0’ 結束符來确定字元串的長度
函數 strlen 用于傳回字元串的長度
下面看一個 strlen 使用的例子
編譯運作,結果如下:
可以看到列印數組 s 的元素時,所有的元素列印出來了,兩個空行分别是兩個 ‘\0’,一個在中間,一個是編譯器自己加上的 ‘\0’,但是列印字元串 s 時,字元串的結束标志是 ‘\0’,是以隻列印了 hello。同樣的,字元串長度是第一個 ‘\0’ 字元前出現的字元個數,字元串 s 的長度是 5。
1、c 語言中通過字元數組模拟字元串
2、c 語言中的字元串使用 ‘\0’ 作為結束符
3、字元串字面量的本質為字元數組
4、字元串相關函數都依賴于結束符 ‘\0’