C语言字符数组用法详解(附带实例)
C 语言中,当数组中的元素类型为字符型时,这样的数组称为字符数组。
字符数组中的每个元素可以存放一个字符。字符数组的定义和引用方法与其他数据类型相似。
例如,下述代码定义了一个字符数组 cArray,该数组中包含 5 个字符型的变量元素:
字符数组的引用也采用下标的形式。例如,引用数组 cArray 中的元素,并依次赋值,代码如下:
例如,上面初始化字符数组的代码可以写成:
【实例】将利用字符数组输出“Park”。定义一个字符数组,通过初始化操作保存一串字符,然后通过循环引用将每一个数组元素输出。
运行程序,结果为:
例如,使用下述代码可以初始化一个字符数组:

图 1 cArray在内存中的实际存放情况
“\0”是由 C编译系统自动加上的。因此上面的赋值语句等价于:
使用格式字符“%c”可实现数组中字符的逐个输入与输出。例如,逐个输出字符数组中的元素:
使用格式字符“%s”可将整个字符串输入或输出。例如,输出一个字符串:
使用格式字符“%s”输出字符串时,需要注意以下几种情况:
【实例】输出名言“Education is the door to freedom”(教育是通向自由之门)。对定义的字符数组初始化,然后采用两种方式输出字符数组中保存的数据,先逐个字符输出数组元素,再直接将字符串整体输出。
运行程序,结果为:
运行程序,结果为:
字符数组中的每个元素可以存放一个字符。字符数组的定义和引用方法与其他数据类型相似。
C语言字符数组的定义
字符数组的定义形式如下:char 数组标识符[常量表达式]
例如,下述代码定义了一个字符数组 cArray,该数组中包含 5 个字符型的变量元素:
char cArray[5];
字符数组的引用也采用下标的形式。例如,引用数组 cArray 中的元素,并依次赋值,代码如下:
cArray[0]='H'; cArray[1]='e'; cArray[2]='l'; cArray[3]='l'; cArray[4]='o';
C语言字符数组的初始化
在对字符数组进行初始化操作时,有以下几种方法。1) 逐个字符赋给数组中的元素
这是最容易理解的初始化字符数组的方式。例如:char cArray[5]={'H','e','l','l','o'};定义了一个包含 5 个元素的字符数组,在初始化的大括号中,每个字符赋值给一个数组元素。
2) 定义字符数组的同时进行初始化,可以省略数组长度
如果初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数来确定数组长度。例如,上面初始化字符数组的代码可以写成:
char cArray[]={'H','e','l','l','o'};代码中定义的 cArray[] 没有给出数组大小,但系统会自动根据初值的个数确定数组长度为 5。
3) 利用字符串给字符数组赋初值
字符数组可用来存放字符串。因此,也可以用字符串的方式对字符数组进行初始化赋值。例如:char cArray[]={"Hello"};或者将“{}”去掉,写成:
char cArray[]="Hello";
【实例】将利用字符数组输出“Park”。定义一个字符数组,通过初始化操作保存一串字符,然后通过循环引用将每一个数组元素输出。
#include<stdio.h> int main() { char cArray[5]={'P','a','r','k'}; /*定义字符数组并初始化*/ int i; /*循环控制变量*/ for(i=0;i<5;i++) /*循环输出字符数组元素*/ { printf("%c",cArray[i]); } printf("\n"); /*输出换行*/ return 0; }初始化字符数组时要注意,每个元素都要使用一对单引号(' ')括起来。在 for 循环中,因为输出的类型是字符型,所以 printf() 函数中使用的是“%c”格式符。通过循环变量 i,cArray[i] 实现了对数组中不同元素的引用。
运行程序,结果为:
Park
C语言字符数组的结束标志
在 C语言中,使用字符数组保存字符串时,系统会自动为其添加“\0”作为结束符。也就是说,用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。例如,使用下述代码可以初始化一个字符数组:
char cArray[]="Hello";上面的字符数组 cArray 在内存中的实际存放情况如下图所示:

图 1 cArray在内存中的实际存放情况
“\0”是由 C编译系统自动加上的。因此上面的赋值语句等价于:
char cArray[]={'H','e','l','l','o','\0'};字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。因此下面的写法也是合法的:
char cArray[5]={'H','e','l','l','o'};是否加“\0”,应根据需要来决定。由于系统对字符串常量会自动加一个“\0”,因此,为了使处理方法一致,且便于测定字符串的实际长度,在字符数组中也常常人为地加上一个“\0”。例如:
char cArray[6]={'H','e','l','l','o','\0'};
注意,如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的那个字符串的长度。
C语言字符数组的输入和输出
字符数组的输入和输出可以使用两种格式字符:“%c”和“%s”。使用格式字符“%c”可实现数组中字符的逐个输入与输出。例如,逐个输出字符数组中的元素:
for(i=0;i<5;i++) /*进行循环*/ { printf("%c",cArray[i]); /*逐个字符输出数组元素*/ }
使用格式字符“%s”可将整个字符串输入或输出。例如,输出一个字符串:
char cArray[] = "GoodDay!"; /*初始化字符数组*/ printf("%s", cArray); /*输出字符串*/
使用格式字符“%s”输出字符串时,需要注意以下几种情况:
- 输出字符中不包括结束符“\0”;
- printf() 函数中的输出项是字符数组名 cArray,而不是数组中的元素名 cArray[0] 等;
- 即使数组长度大于字符串实际长度,也只会输出到“\0”为止;
- 如果一个字符数组中包含多个“\0”结束字符,则在遇到第一个“\0”时输出就结束;
【实例】输出名言“Education is the door to freedom”(教育是通向自由之门)。对定义的字符数组初始化,然后采用两种方式输出字符数组中保存的数据,先逐个字符输出数组元素,再直接将字符串整体输出。
#include<stdio.h> int main() { int iIndex; char cArray[33]="Education is the door to freedom"; /*定义字符数组,用于保存字符串*/ char cArray2[100]="教育是通向自由之门"; for(iIndex=0;iIndex<33;iIndex++) /*逐个字符输出数组元素*/ { printf("%c",cArray[iIndex]); } printf("\n%s\n",cArray2); /*将字符串整体输出*/ return 0; }在代码中,对数组元素逐个字符输出时,使用的是循环方式。直接输出字符串时,使用的是printf函数中的格式字符“%s”。要注意,直接输出字符串时,不能使用格式字符“%c”。
运行程序,结果为:
Education is the door to freedom
教育是通向自由之门
C语言字符数组的应用
【实例】随机输入一个字符串,计算该字符串的长度。#include<stdio.h> int main() { int iIndex; /*循环控制变量*/ int length=0; /*保存字符串长度*/ char cArray[80]; /*保存用户输入的字符串*/ printf("请输入字符串:\n"); gets(cArray); /*用gets函数输入字符串*/ for(iIndex=0;cArray[iIndex]!='\0';iIndex++) /*循环字符串数组,直到遇到“\0”结束*/ { length++; /*每遍历一个字符,字符串长度加 1*/ } printf("字符串长度是:%d\n",length); /*输出字符串长度*/ return 0; }使用 gets() 函数将输入的字符串保存在 cArray 字符数组中。使用 for 循环判断当前数组元素是否为结束符“\0”,如果不是,则字符串长度加 1;如果是,则退出循环。
运行程序,结果为:
请输入字符串:
cyuyanzhongwenwang
字符串长度是:18