一、字符数组和字符串的再认识
此处关于字符串是否是字符数组的问题,此处我们需要明确:
- 字符数组,完整地说叫字符类型的数组。字符数组不一定是字符串。
- 字符串是最后一个字符为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中被定义。