C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

8.3.2 字符串与字符数组

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。在前面介绍字符串常量时,已说明字符串总是以’\0’作为结束符。因此当把一个字符串存入一个数组时,也要把结束符’\0’存入数组,并以此作为该字符串是否结束的标志。有了标志’\0’后,就不必用字符数组的长度来判断字符串的长度了。

C语言允许用字符串对数组进行初始化赋值。例如下面的格式。

    char c[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm'};

上述格式可写为:

    char c[]={"C program"};

也可以去掉{},写为如下格式。

    char c[]="C program";

用来存放字符串的字符数组的定义方法和普通字符数组的定义方法相同,而赋初值的方式有两种。第1种方式是按单个字符的方式赋值,例如前面的char s5[3]=['1','2','\0'];,要注意代码中必须有一个字符是字符串的结束标记。第2种方式是直接在初值表中写一个字符串常量,请看下面的例子。

    char s1[3]={"12"};

结果是:s1[0]值为’1',s1[1]值为’2',s1[2]值为’\0'。字符数组s2中存放的是一个字符串,数组长度为3。

    char s2[]={"12"} /*若为全部元素赋初值,可以省略数组长度*/

结果是:s2[0]值为’1',s2[1]值为’2',s2[2]值为’\0'。字符数组s2中存放的是一个字符串,数组长度为3。

    char s3[5]={"12"}; /*默认自动型,不赋初值的元素为空字符*/

结果是:s3[0]值为’1',s3[1]值为’2',s3[2]值为’\0',s3[3]和s3[4]值均为’\0'。

    static char s4[5]={"12"}; /*静态型,不赋初值的元素为空字符*/

结果是:s4[0]值为’1',s4[1]值为’2',s4[2]值为’\0',s4[3]和s4[4]值均为’\0'。

    char s5[3][5]={"123", "ab", "x"}; /*用二维数组存放多个字符串*/

结果是:s5[0][0]值为’1', s5[0][1]值为’2', s5[0][2]值为’3', s5[0][3]值为’\0';s5[1][0]值为’a', s5[1][1]值为’b', s5[1][2]值为’\0'; s5[2][0]值为’x', s5[2][1]值为’\0';

因为省略了存储类型,默认为自动型,所以其他所有元素值均为空字符。

在C语言有规定:使用“%s”格式从键盘向字符数组中输入字符串时,回车换行符或空格符均为字符串的结束标记。