C 語言中的字符串
在前面 C 語言的變量類型中介紹過 C 語言中的變量類型。不知道大家有沒有注意到,在 C 語言中有字符類型的變量,但是沒有其他編程語言中經(jīng)常出現(xiàn)的字符串類型,在 JAVA 或者 C# 中用 string
這個關(guān)鍵字來聲明其類型。但是在 C 語言中是沒有這個變量類型的。
1. 字符串
在 C 語言中定義的字符串是一個由字符組成的數(shù)組,這個數(shù)組的最后一個元素是一個表示空的字符 \0
。
字符串 abcde
在 C 語言中的存儲方式如下
char str[]="abcde";
--------------------------
| a | b | c | d | e | \0 |
--------------------------
0 1 2 3 4 5 索引
2. 字符串的聲明
因為字符串是由字符串?dāng)?shù)組存儲的,所以字符串的聲明就是聲明了一個字符串?dāng)?shù)組。方式如下:
char str[6];
3. 字符串的初始化
字符串的初始化可以直接使用雙引號的方式,也可以遵循數(shù)組初始化的方式,但是,有一點特別。就是在使用單個字符逐個賦值的時候,最后一個元素一定是 \0
,而且最需要注意的是,數(shù)組的容量一定要比你實際存儲的字符的數(shù)量多一,因為你要用最后一位來存儲 \0
。
char a[] = "We are family.";
char b[5] = "abcd";
char c[5] = {'a', 'b', 'c', 'd', '\0'}; // 請注意這個初始化方式,和之前的數(shù)組初始化方式一致。
4. 字符串的使用
字符串的使用中,可以通過雙引號包圍字符的方式直接給它賦值,但是請注意這個時候你可能不知道數(shù)組的大小,可能會造成數(shù)組的溢出錯誤,也就是你的賦值超出了數(shù)組可以存儲的最大的字符的數(shù)量。因為字符串本身是通過字符數(shù)組來實現(xiàn)的,因此,數(shù)組的使用方式在這里是可以使用的。比如你可以訪問字符串中的某一個字符,或者更改其中的某一個字符,只要通過其索引位置就可以了, str[9] = 'a';
。
5. 示例
#include <stdio.h>
int main()
{
char a[5];
char b[] = "abcde";
char c[6] = {'a', 'b', 'c', 'd', 'e', '\0'};
a[0] = 'H';
a[1] = 'e';
a[2] = 'l';
a[3] = 'l';
a[4] = '\0';
printf("a = %s\n", a);
for (int i = 0; i < 5; i++)
{
printf("a[%d] = %c\n", i, a[i]);
}
for (int i = 0; i < 6; i++)
{
printf("b[%d] = %c\n", i, b[i]);
}
printf("c = %s\n", c);
return 0;
}
運行結(jié)果:
a = Hell
a[0] = H
a[1] = e
a[2] = l
a[3] = l
a[4] =
b[0] = a
b[1] = b
b[2] = c
b[3] = d
b[4] = e
b[5] =
c = abcde
示例程序里展示了單獨聲明字符串 a
,并且在后面為其賦值,初始化變量 b
和 c
。接著,我們通過屏幕打印語句查看了字符串的內(nèi)容,并且通過循環(huán)語句,輸出了字符數(shù)組中存儲的字符串。
字符串在 C 語言中是不安全存在的,請大家切記如果不是在初始化的時候用雙引號的形式賦值,在使用數(shù)組賦值的時候,請大家一定不要忘記末尾的結(jié)束符號。如果缺少了這個符號,大家可以嘗試看看,看看內(nèi)存使用錯誤的奇妙。
6. 小結(jié)
字符串在 C 語言中的處理與其他語言相比是比較特殊的。在 C 語言中沒有專門的字符串的變量類型。而是通過字符數(shù)組的方式來實現(xiàn)字符串的功能。這使得字符串具有了數(shù)組的全部特性。但是與其它類型的數(shù)組最大的一點區(qū)別就是存儲字符串的數(shù)組的最后一位是 \0
,表示的是空,這點可以用來檢測一個字符串是不是已經(jīng)到了末尾。