注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。
測試環境: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 格式化控制符...