Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-17   C   瀏覽次數:

C語言 - 第十三章 | 字串 - 字串陣列

什麼是字串?

C語言中字串的本質是由字元所組成的陣列,並在最後加上一個空(null)字元'\0',例如下面這個程式就是一個 “hello” 字串的宣告:

1
2
3
4
char text[] = {'h', 'e', 'l', 'l', 'o', '\0'};

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

C語言是使用空字元來識別一個字元陣列是否表示字串,像上例就可以用來表示一個字串"hello",在C語言中也可以這麼宣告字串:

1
char text[] = "hello";

註:在這個例子中,雖然你沒有指定空字元'\0',但是程式會自動加上空字元,而基本上還是字元陣列,與前一個宣告方式是相同的。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main() {

char text[] = "hello";
int length = sizeof(text) / sizeof(text[0]);

for (int i = 0; i < length; i++) {
if (text[i] == '\0') {
puts("null");
}
else {
printf("%c ", text[i]);
}
}
putchar('\n');

return 0;
}

字串是字元陣列,可以使用陣列的存取方式取出每一個字元,在指定"hello"時表面上雖然只有5個字元,但是最後會加上一個空字元'\0',所以text[]共使用了6個字元,由於字串的最後一個字元為空字元,可以檢驗這個字元來看看字串是否為空,例如:

1
2
3
4
5
6
7
8
9
// 判斷'\0'方式
if(text[0] == '\0') {
puts("字串為空");
}

// 空字元在作條件判斷時,會被視為 0
if(!text[0]) {
puts ("字串為空");
}

由使用者輸入取得字串值時,需注意不要超過字串(字元陣列)的長度;使用scanf()從使用者輸入取得字串值,並儲存至字元陣列,只要這麼做就可以了。

1
2
3
4
char str[10];
printf("輸入字串:");
scanf("%s", str);
printf("你輸入的字串為 %s\n", str);

這個程式片段可以取得使用者的字串輸入,所輸入的字串長度不得超過10個字元,10個字元的上限包括空白字元,所以實際上可以輸入9個字元;如果輸入的字元超出所宣告的上限,會發生不可預期的錯誤。

在使用scanf()取得使用者輸入的字串時,格式指定字是使用%s,而變數前不用再加上&,因為實際上,字串(字元陣列)變數名稱本身,即表示記憶體位址資訊。

要指定新的字串值給它時,你不能像下面的方式指定:

1
2
char name[10]; 
name = "morosedog";

而必須要一個字元一個字元的指定至陣列中,並在最後加上空白字元,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
char name[10] = {'\0'}; 
name[0] = 'm';
name[1] = 'o';
name[2] = 'r';
name[3] = 'o';
name[4] = 's';
name[5] = 'e';
name[6] = 'd';
name[7] = 'o';
name[8] = 'g';
name[9] = '\0';

puts(name);

註:這樣的字元指定方式當然相當的不方便,所以C語言提供了字串處理的相關函式,可以協助你進行一些字串處理,在之後的會說明。
字串的宣告還有指標(Pointer)的宣告方式,後面提到指標時會特別說明。


註:以上參考了
hackersir gitbooks
字串(字元陣列)