上篇文章讲述了二维数组的相关知识,本文我们接着来讲字符数组,和字符数组里要使用的一些函数,本文所有代码均匹配于VS环境下。
目录
一、前情介绍
二、怎样定义字符数组
三、字符数组的初始化
四、字符串和字符串结束标志
五、字符数组的输入和输出
一、前情介绍
字符型数据是以字符的ACSII代码存储在代码单元格中的,一般占一个字节。由于ASCII代码也属于整数形式,所以C99标准中,把字符类型归纳为整形类型中的一种。
二、怎样定义字符数组
用来存放字符型数据的数组称为字符型数组,在字符数组中一个元素内存放一个字符。定义字符型数组的方法与定义数值型数组的方法类似,例如:
char arr[10];
由于字符型数组是以整数形式存放的,也可以用整形数组来存放字符型数据,缺点就是浪费空间,一个字符只占一个字节,而一个整形数据占四个字节,将字符放在整形数组中会浪费空间。
三、字符数组的初始化
对字符型数组进行初始化,最容易理解的方法就是用“初始化列表”(这里的初始化列表在之前的数组的文章中进行过介绍,这里就不多进行描述),例如:
char arr[10]={'s','d','f','e','t','p','q','z','k','r'};
如果在定义字符数组时不进行初始化,那么数组中元素的值是不可预料的。如果花括号中提供的初值个数大于数组长度,则出现语法错误;如果初值个数小于数组长度,那么初值只会赋给前面的元素,后面的元素会自动赋值为空值,即‘\0’。
如果初值个数与预期个数相同,则可以省略数组长度,与之前的一维数组二维数组类似,当然字符型数组也有一维和二维之分。
四、字符串和字符串结束标志
在C语言中,字符串是被当作字符数组来处理的,在实际工作中,人们往往关心的是字符串的有效长度,而不是字符数组的长度。例如:定义一个字符数组长度为100,而字符串的长度为60。所以为了测字符串的实际长度,C语言规定了“字符串结束标志”,即‘\0’。
如果字符数组中有若干字符,前9个都不是空字符,而第10个是空字符,那么认为空字符之前是一个字符串,而字符串的有效字符为9个。
注意:C系统会在字符数组存储字符串常量时自动加一个‘\0’,作为字符串结束的标志,例如:“Cprogram”共九个字符,但其存放在一维数组中占10的字节,最后的‘\0’是系统自动加的。
对C语言处理字符串的方法有了了解之后,再补充一种字符数组初始化的方法,即用字符串常量来对字符数组进行初始化,例如:
char arr[]={"I am happy"};char arr[]="I am happy";
以上两种方式均可,这里是用一个字符串作为初值,很显然这种方法直观,方便更符合人们的习惯。
五、字符数组的输入和输出
字符数组的输入输出可以有两种方法。
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。
(2)将整个字符串输入或输出。用格式符“%s”输入或输出一整个字符串。
注意:
- 输出的字符串中不包括结束符“\0”。
- 用printf函数输出字符串时,输出项是字符数组的名字,而不是数组元素名。写成下面这样是不对的: printf(“%s”,arr[0]);
- 如果一个字符串包括一个以上结束符“\0”,则遇到第一个就输出结束。
- 可以用scanf输入一个字符串,输入项应是已定义的数组名,输入的字符串应短于已定义的字符数组的长度。
5.如果利用一个scanf函数输入多个字符串,则输入时应以空格分隔,例如:
scanf("%s%s%s",str1,str2,str3);//输入数据How are you?
6.scanf函数的输入项如果是字符数组名,不要再加地址符“&”,因为再C语言中数组名代表数组中第一个元素的地址。
这是字符数组的相关内容,下一期进行字符数组相关函数的讲解,有需要的技术门持续关注,我会一直更新。