上篇文章讲述了二维数组的相关知识,本文我们接着来讲字符数组,和字符数组里要使用的一些函数,本文所有代码均匹配于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”输入或输出一整个字符串。

注意:

  1. 输出的字符串中不包括结束符“\0”。
  2. 用printf函数输出字符串时,输出项是字符数组的名字,而不是数组元素名。写成下面这样是不对的: printf(“%s”,arr[0]);
  3. 如果一个字符串包括一个以上结束符“\0”,则遇到第一个就输出结束。
  4. 可以用scanf输入一个字符串,输入项应是已定义的数组名,输入的字符串应短于已定义的字符数组的长度。

5.如果利用一个scanf函数输入多个字符串,则输入时应以空格分隔,例如:

scanf("%s%s%s",str1,str2,str3);//输入数据How are you?

6.scanf函数的输入项如果是字符数组名,不要再加地址符“&”,因为再C语言中数组名代表数组中第一个元素的地址。

这是字符数组的相关内容,下一期进行字符数组相关函数的讲解,有需要的技术门持续关注,我会一直更新。