字串的基本介紹
在 C 中,字串是由空字元(’\ 0’)終止的字元序列。
我們可以使用字串文字建立字串,字串文字是由雙引號括起來的字元序列; 例如,取字串文字 hello world
。字串文字自動以空值終止。
我們可以使用幾種方法建立字串。例如,我們可以宣告一個 char *
並將其初始化為指向字串的第一個字元:
char * string = "hello world";
當如上所述將 char *
初始化為字串常量時,字串本身通常以只讀資料分配; string
是指向陣列的第一個元素的指標,它是字元'h'
。
由於字串文字是在只讀記憶體中分配的,因此它是不可修改的 1 。任何修改它的嘗試都會導致未定義的行為 ,所以最好新增 const
來獲得像這樣的編譯時錯誤
char const * string = "hello world";
它有類似的效果 2 為
char const string_arr[] = "hello world";
要建立可修改的字串,可以使用字串文字宣告一個字元陣列並初始化其內容,如下所示:
char modifiable_string[] = "hello world";
這相當於以下內容:
char modifiable_string[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0'};
由於第二個版本使用大括號括起初始值設定項,因此字串不會自動以空值終止,除非通常將字元陣列中的'\0'
字元顯式包含在最後一個元素中。
1 不可修改意味著字串文字中的字元無法修改,但請記住指標 string
可以修改(可以指向其他地方或可以遞增或遞減)。
2 兩個字串在某種意義上都具有類似的效果,即兩個字串的字元都無法修改。應該注意的是 string
是一個指向 char
的指標,它是一個可修改的 l 值, 因此它可以遞增或指向某個其他位置,而陣列 string_arr
是一個不可修改的 l 值,它不能被修改。