C语言字符数组的定义、初始化和使用
什么叫字符数组?有限个字符可以存储在一个一维数组中,数组中的每个元素都是字符,那么这个一维数组就是字符数组。如果有多个字符串则可以存储在二维字符数组中。本文介绍如何利用字符数组快速实现对字符串的操作。
字符串常量是使用双引号包含的字符序列。例如下面就是字符串。
字符串“hello world”在内存中的存储形式如下图所示。
注意:字符串由有效字符和字符串结束符 '\0' 组成,系统对字符串操作时,并不是按定义时的字符数组长度扫描所有存储单元,而是扫描到 '\0' 即认为串结束,不再继续扫描 '\0' 之后的存储单元。
姓名中的每个字符可以用不同的下标表示,下标范围是 0~9。name[2] 表示姓名中的第 3 个字符。
C语言二维字符数组定义的一般形式如下。
第 n 个姓名用行下标表示,下标范围是 0~4;每个人姓名中的每个字符用不同的列下标表示,下标范围是 0~9。name[2][0] 表示第 3 个姓名中的第 1 个字符。
当然,用字符数组处理字符串时,也可以与 “%s” 格式控制符配合,完成字符串的输入/输出。例如:
本例中,由于定义数组长度为 15,因此输入的字符串长度必须小于 15,以留出一个字节用于存放字符串结束标志 '\0'。应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
注意:当用 scanf() 函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如,当输入的字符串中含有空格时,运行情况为:
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
字符数组概述
在C语言中,字符串是由一维字符数组存储的,我们可以像处理数组元素一样处理字符串中的每个字符。字符串常量是使用双引号包含的字符序列。例如下面就是字符串。
"hello world"
"123abc,.?"
\0
作为结束标志。字符串中每个字符在内存中占 1 个字节,例如 “hello world” 字符串,它并不像我们看到的占用了 11 个存储字节,而是占用了内存中的 12 个字节。'\0' 是编译器自动加上的,是字符串的一部分。字符串“hello world”在内存中的存储形式如下图所示。

注意:字符串由有效字符和字符串结束符 '\0' 组成,系统对字符串操作时,并不是按定义时的字符数组长度扫描所有存储单元,而是扫描到 '\0' 即认为串结束,不再继续扫描 '\0' 之后的存储单元。
字符数组的定义
C语言一维字符数组定义的一般形式如下:char 数组名[常量表达式];
例如:char name[10];
定义了一个可以保存 1 个姓名的字符数组,这个姓名最长可以存储 10 个字符(含字符串结束符'\0')。系统给该数组分配 10 个字节,姓名中的每个字符占一个字节。姓名中的每个字符可以用不同的下标表示,下标范围是 0~9。name[2] 表示姓名中的第 3 个字符。
C语言二维字符数组定义的一般形式如下。
char 数组名[常量表达式][常量表达式];
例如:char name[5][10];
定义了一个可以保存 5 个姓名的字符数组,每个姓名最长可以存储 10 个字符(含字符串结束符'\0')。系统给该数组分配 50 个字节,姓名中的每个字符占一个字节。第 n 个姓名用行下标表示,下标范围是 0~4;每个人姓名中的每个字符用不同的列下标表示,下标范围是 0~9。name[2][0] 表示第 3 个姓名中的第 1 个字符。
字符数组的初始化
C语言字符数组的初始化通常是逐个字符赋给数组中各元素。例如:char str[11]={ 'W','E ','L','C',' O','M',' ','T','O',' ','C'};
即把 11 个字符分别赋给 str[0]~str[10] 这 11 个元素。str[0]='W',str[1]='E',str[2]='L',str[3]='C',str[4]='O',str[5]='M',str[6]='',str[7]='T',str[8]='O',str[9]='',str[10]='C'。
如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即 '\0')。字符数组的引用
字符数组用来存储字符串,串中的每个字符用下标引用。【示例1】
输入字符串 “welcome to China”,然后输出。代码如下:#include <stdio.h> int main() { int i; char c[16]={'w','e','l','c','o','m','e', ' ','t','o',' ','C','h','i','n','a'}; /*初始化字符串*/ for (i=0;i<16;i++) /*输出字符串*/ printf("%c",c[i]); printf("\n"); }运行结果:
welcome to China
上述程序中采用初始化的方式将字符串 "welcome to China" 初始化到字符数组中,当然也可采用字符串的方式,下面将会介绍。字符数组的输入与输出
由于字符串放在字符数组中,因此,对字符串的输出也是对字符数组的输出。例如:char s[11]; for(i=0;i<11;i++) /*输入*/ scanf("%c",s[i]); for(i=0;i<11;i++) /*输出*/ printf("%c",s[i]);上述例子适用于字符数组中存储的字符不是以 '\0' 结束时,用格式控制符“%c”将字符数组中的每个元素输出。
当然,用字符数组处理字符串时,也可以与 “%s” 格式控制符配合,完成字符串的输入/输出。例如:
char s[11];
scanf("%s",s); /*输入*/
char s[ ]="Hello,China";
printf("%s",s); /*输出*/
【示例2】
采用 printf() 函数和 scanf() 函数输入/输出一个字符数组。代码如下:#include <stdio.h> int main() { int i; char st[15]; printf("input string:\n"); scanf("%s",st); for(i=0;i<15;i++) printf("%c",st[i]); }运行结果:
input string:
hello-chaina!
hello-chaina!
本例中,由于定义数组长度为 15,因此输入的字符串长度必须小于 15,以留出一个字节用于存放字符串结束标志 '\0'。应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
注意:当用 scanf() 函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如,当输入的字符串中含有空格时,运行情况为:
input string:
this is a book
this
从输出结果可以看出空格以后的字符都未能输出。为了避免这种情况,可使用 gets() 函数输入带空格的串。声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。