一、字符數組和字符串的再認識
此處關於字符串是否是字符數組的問題,此處我們需要明確:
- 字符數組,完整地說叫字符類型的數組。字符數組不一定是字符串。
- 字符串是最後一個字符爲NULL字符的字符數組。字符串一定是字符數組。
- 字符數組的長度是固定的,其中的任何一個字符都可以爲NULL字符。
- 字符串只能以NULL結尾,其後的字符便不屬於該字符串。
- strlen()等字符串函數對字符串完全適用,對不是字符串的字符數組不適用。
二、字符串數組
字符串數組是二維字符數組,同理,二維字符數組不一定是字符串數組
接下來以一段代碼進行說明:
#include <stdio.h>
int main(void)
{
int i;
//這是字符數組賦初值的方法,維數:4X2
char cArr[][2] = {{'Q','U'},
{'A','N'},
{'X','U'},
{'E','\0'}};
//這是字符串數組賦初值的方法,維數:4X3
char sArr[][3] = {"qu","an","xu","e"};
//用sizeof()求長度
for (i=0; i<4; i++) {
printf("%d: %d %d\n", i, sizeof(cArr[i]), sizeof(sArr[i]));
printf("[%s] [%s]\n", cArr[i], sArr[i]);
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
從上面可以看出,cArr[i]的長度爲2,sArr[i]的長度爲3,因爲多了一個NULL字符。
三、字符串與字符數組的相互轉化
字符數組中插入一個NULL字符,就形成了字符串,一般NULL字符在有效字符的最後。
#include <stdio.h>
#include <string.h>
int main(void)
{
//因爲最後有NULL,所以這就變成了字符串
char cArr[] = {'Q', 'U', 'A', 'N', 'X', 'U', 'E', '\0'};
//因爲少定義了一位,最後無NULL,所以這就變成了字符數組
char sArr[7] = "quanxue";
//最後一個元素未賦值
char tArr[16] = "www.quanxue.cn";
//用sizeof()求長度
printf("cArr: %2d ,%2d\n", strlen(cArr), sizeof(cArr));
printf("sArr: %2d ,%2d\n", strlen(sArr), sizeof(sArr));
printf("tArr: %2d ,%2d\n", strlen(tArr), sizeof(tArr));
//將tArr的最後一個元素賦值,字符串就成了字符數組
tArr[15] = '!';
//作爲字符數組,將顯示16個字符
for (i=0; i<16; i++) printf("%c", tArr[i]); //字符數組的顯示方法
//作爲字符串,將顯示14個字符。
printf("\n%s\n", tArr); //字符串的顯示方法
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
四、數組的輸入和輸出
getchar()和putchar()函數是單個字符的輸入輸出,gets()和puts()是字符串的輸入輸出,也是標準函數,在stdio.h中被定義。