C语言字符数组的用法(非常详细,附带实例)
C语言中的字符数组本质是存储字符的数组,这种数组中的每个元素都可以存放一个字符。
我们知道,字符串就是由两个或两个以上的字符组成的,在 C 语言中通常使用一个字符数组来存放一个字符串。实际上,字符数组就是一系列的字符集合,在某种程度上可以说就相当于字符串。
字符数组的定义和使用方法与其他基本类型的数组相似。例如定义一个字符数组 iArray[6],按照下图所示的初始化形式定义,将会在控制台上输出“MingRi”。

图 1 定义一个字符数组iArray[6]
例如,定义字符数组 cArray,代码如下:
字符数组的引用与其他类型数组的引用一样,也是使用索引的形式。例如,引用定义的数组 cArray[4]中的元素,代码如下:
C 语言中并不存在字符串数据类型,只存在字符数据类型,如果想存放字符串,就需要字符数组,多个字符组合在一起构成字符串。
例如,初始化字符数组的代码可以写成如下形式:
例如,初始化一个字符数组,代码如下:
有了“\0”后,字符数组的长度就不那么重要了。当然在定义字符数组时应估计字符串的实际长度,保证数组长度始终大于字符串实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的长度。
用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。上面的字符数组 cArray 在内存中的实际存放情况如下图所示。

图 2 cArray在内存中的实际存放情况
字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。例如,下面的写法也是合法的。
首先,可以使用格式字符“%c”实现字符数组中字符的逐个输入或输出。例如,循环输出字符数组中的元素,代码如下:
其次,可以使用格式字符“%s”将整个字符串依次输入或输出。例如,输出一个字符串,代码如下:
可能有的读者会有疑惑,字符串是存放在字符数组中的吗?字符串除了可以存放在字符数组中,还有其它的存放方式,比如:
我们知道,字符串就是由两个或两个以上的字符组成的,在 C 语言中通常使用一个字符数组来存放一个字符串。实际上,字符数组就是一系列的字符集合,在某种程度上可以说就相当于字符串。
字符数组的定义和使用方法与其他基本类型的数组相似。例如定义一个字符数组 iArray[6],按照下图所示的初始化形式定义,将会在控制台上输出“MingRi”。

图 1 定义一个字符数组iArray[6]
C语言字符数组的定义
字符数组的定义与其他数据类型的数组的定义类似,一般形式如下:char 数组标识符[常量表达式]因为要定义的是字符型数据,所以在数组标识符前所用的是 char,后面括号中表示的是数组元素的数量。
例如,定义字符数组 cArray,代码如下:
char cArray[4];其中,cArray 表示数组标识符,4 表示数组中包含 4 个字符型的元素。
字符数组的引用与其他类型数组的引用一样,也是使用索引的形式。例如,引用定义的数组 cArray[4]中的元素,代码如下:
cArray[0]='L'; cArray[1]='o'; cArray[2]='v'; cArray[3]='e';上面的代码表示依次引用数组中的元素并为其赋值。
C 语言中并不存在字符串数据类型,只存在字符数据类型,如果想存放字符串,就需要字符数组,多个字符组合在一起构成字符串。
C语言字符数组的初始化
对字符数组进行初始化操作有以下几种方法。1) 逐个字符赋给数组中的各元素
这是很容易理解的初始化字符数组的方法。例如,初始化一个字符数组,代码如下:char cArray[4]={'L','o','v','e'};上述代码定义包含 4 个元素的字符数组,花括号中的每一个字符对应赋值一个数组元素,使用字符数组输出一个字符串。
2) 在定义字符数组时进行初始化(可省略数组长度)
如果初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数来确定数组长度。例如,初始化字符数组的代码可以写成如下形式:
char cArray[]={'L','o','v','e'};可见,代码中定义的 cArray[] 中没有给出数组的长度,但是根据初值的个数可以确定数组的长度为 4。
3) 利用字符串给字符数组赋初值
通常用一个字符数组来存放一个字符串。例如,用字符串对数组进行初始化,代码如下:char cArray[]={"Love"};或者将“{}”去掉,写成如下形式:
char cArray[]="Love";
C语言字符串的结束标志'\0'
在 C语言中,使用字符数组保存字符串,也就是使用一个一维数组保存字符串中的每一个字符,此时系统会自动为其添加“\0”作为结束标志。例如,初始化一个字符数组,代码如下:
char cArray[]={'L','o','v','e','\0'};通常字符串会以“\0”作为结束标志,当把一个字符串存入一个数组时,也就是把结束标志“\0”存入数组,并将此作为该字符串是否结束的标志。
有了“\0”后,字符数组的长度就不那么重要了。当然在定义字符数组时应估计字符串的实际长度,保证数组长度始终大于字符串实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的长度。
用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。上面的字符数组 cArray 在内存中的实际存放情况如下图所示。

图 2 cArray在内存中的实际存放情况
字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。例如,下面的写法也是合法的。
char cArray[4]={'L','o','v','e'};是否加“\0”,完全由开发人员的需求决定。
C语言字符数组的输入和输出
字符数组的输入和输出有以下两种方法。首先,可以使用格式字符“%c”实现字符数组中字符的逐个输入或输出。例如,循环输出字符数组中的元素,代码如下:
for(i=0;i<5;i++) /*进行循环*/ { printf("%c",cArray[i]); /*输出字符数组中的元素*/ }变量 i 为循环的控制变量,并且在循环中作为数组的索引来实现循环输出。
其次,可以使用格式字符“%s”将整个字符串依次输入或输出。例如,输出一个字符串,代码如下:
char cArray[]="GoodDay!"; /*初始化字符数组*/ printf("%s",cArray); /*输出字符串*/使用格式字符“%s”将字符串进行输出需注意以下几种情况。
- 输出字符不包括结束标志“\0”;
- 用“%s”格式输出字符串时,printf() 函数中的输出项是字符数组名 cArray,而不是数组中的元素名 cArray[0]等;
- 如果数组长度大于字符串实际长度,则只输出到“\0”;
- 如果一个字符数组中包含多个“\0”,则在遇到第一个“\0”时输出就结束。
可能有的读者会有疑惑,字符串是存放在字符数组中的吗?字符串除了可以存放在字符数组中,还有其它的存放方式,比如:
char *p; p = malloc(80 * sizeof(char)); // 分配内存大小 strcpy(p, "https://c.biancheng.net"); puts(p);程序中,"https://c.biancheng.net" 是一个字符串,但它并不是存放在某个字符数组中的。