30 C語言中的字串

2021-10-02 08:53:46 字數 2675 閱讀 3588

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、字串的概念

1) 字串是有序字元的集合

2) 字串是程式中的基本元素之一

3) c語言中沒有字串的概念

- c語言中通過特殊的字元陣列模擬字串

- c 語言中的字串是以『

\0』結尾的字元陣列

二、字元陣列與字串

1) 在c語言中,雙引號應用的單個或多個字串是一種特殊的字面量

- 儲存於程式的全域性唯讀儲存區(不能修改字串,會導致程式崩潰)

- 本質為字元陣列,編譯器自動在結尾加上『\0

』字元(所有字串都有)

下面那些是字串的定義?

char ca=;           不是字串

char sa=; 是字串

char ss="hello world!"; 是字串

char* str="hello world!"; 是字串

例項分析

字元陣列與字串

30-1.c

#include int main()

; char sa = ;

char ss = "hello world!";

char* str = "hello world!";

printf("%s\n", ca);

printf("%s\n", sa);

printf("%s\n", ss);

printf("%s\n", str);

return 0;

}

操作:

1) gcc 30-1.c -o 30-1.out編譯正確,列印結果:

helloworld        //不是我們期望的hello

world

hello world!

hello world!

分析:

ca儲存的字元沒有'\0',格式%s列印時必須獲取'\0'才終止。ca和sa是棧上連續定義的兩個陣列,它們的記憶體是分布是緊密相連的。ca沒有儲存'\0',sa儲存了'\0',因此列印結果為helloworld。

三、鮮為人知的小秘密

1) 你知道嗎?

- 字串字面量的本質是乙個陣列

- 字串字面量可以看作常量指標(僅僅是為了方便理解,並不是常量指標:const char* s)

- 字串字面量中的字串不可改變(儲存在唯讀儲存區,修改會導致程式崩潰)

- 字串字面量至少包含乙個字元——

'\0'

「hello world!」
四、字串字面量

1) 「hello world!」是乙個無名的字元陣列

下面的表示式正確嗎?

char b = "abc"[0];           //字元陣列第0個元素,類似a[0]

char c = *("123"+1); //首位址+1,類似陣列首位址a+1指向a[1]

char t = *""; //表示0

例項分析

字串字面量的本質

30-2.c

#include int main()

操作:

1) gcc 30-2.c -o 30-2.out編譯正確,列印結果:

a20

hello

0x804856e

分析:

字串字面量是無名的字元陣列。

五、字串的長度

1) 字串的長度就是字串所包含字元的個數

2) 字串長度指的是第乙個

'\0'

字元前出現的字元個數(重點)

3) 通過'\0'結束符來確定字串的長度

4) 函式strlen用於返回字串的長度

char s = "hello";

printf("%d\n",strlen(s)); //5

printf("%d\n",strlen("123")); //3

程式設計實驗

strlen的使用

30-3.c

#include #include int main()

{ char s = "hello\0world"; //所有字串都依賴於第乙個\0

int i = 0;

for(i=0; i操作:

1) gcc 30-3.c -o 30-3.out編譯正確,列印結果:

hello

//'\0'不能顯示列印出來wo

rld //'\0'不能顯示列印出來

hello

53

小結:

1) c語言中通過字元陣列模擬字串

2) c語言中的字串使用'\0'作為結束符

3) 字串字面量的本質為字元陣列

4) 字串相關函式都依賴於結束符'\0'

30 C語言中的字串

字串是有序字元的集合字串是程式的基本元素之一 c語言中沒有字串的概念 通過特殊的字元陣列模擬字串,字串是以 0 結尾的字元陣列。在c語言中,雙引號引用的單個或多個字元是一種特殊的字面量 字串當作乙個全域性的字元陣列儲存於全域性唯讀儲存區中,本質上為字元陣列,編譯器自動在結尾加上 0 字元。注意 不論...

C語言中的字串

從概念上講,c語言中沒有字串型別 在c語言中使用字元陣列來模擬字串 c語言中的字串是以 0 結束的字元陣列 c語言中的字串可以分配於棧空間,堆空間或者唯讀儲存區 char s1 沒有 0 所以s1只不過是個單純的字元陣列 char s2 也是乙個字元陣列,但是最後乙個元素是 0 因此s2就成了c語言...

c語言中的字串

一 c語言中的字串 c語言中沒有字串型別 字串實際就是多個字元連在一起,所有可以用字元陣列來存放字串。但是使用字元陣列輸出時需要使用for迴圈 例如 這樣使用十分不方便,有沒有一種簡約的方式,讓我們一下子就能輸出呢?有但是需要改兩個地方!1.長度要 1 2.末尾要加乙個 0 然後用 s 格式化控制符...