qkhhxkj 风的距离

导航

字符数组

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。

1 字符数组的定义

定义方法与前面介绍类似

如:char c[3];

c[0]='i';

c[1]=' ';

c[2]='a';

定义的c为字符数组,包含3个元素

由于字符型与整型是互相通用的,因此上面的定义也可以改为

int c[3];

2 字符数组的初始化

对字符数组初始化,最容易的理解方式是逐个字符赋给数组中各元素

如:char c[10] = {'i',' ','a','m',' ','h','a','p','p','y'};

也可以定义和初始化一个二维字符数组

char diamond[5][5] = {{' ',' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ',' ','*'}};

3 字符数组的引用

可以引用字符数组中的一个元素,得到一个字符。

#include <stdio.h>

void main()

{

  char c[10] = {'i', ' ', 'a', 'm', ' ', 'a', 'b','o','y'};

  int i;

  for(i=0;i<10;i++)

    printf("%c", c[i]);
}

运行结果: i am a boy

4 字符串和字符串结束标志

  在C语言中,将字符串作为字符数组来处理,例如定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符 '\0' 代表,如果有一个字符串,其中第10个字符为 '\0' 则此字符串的有 效字符为9个,也就是说,在遇到字符 '\0' 时,表示字符串结束,由它前面的字符组成字符串。

  系统对字符串常量也自动加一个 '\0' 作为结束符,例如 "C Program" 共有9个字符,但在内在中占10个字节,最后一个字节 '\0' 是由系统自动加的,字符串作为一维数组存放在内存中。

  有了结束标志 '\0' 后,字符数组的长度就显示不那么重要了,在程序中往往依靠检测 '\0' 的位置来判断字符串是否结束,而不是根据数组的长度来决定字符串的长度,当然在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度,如果在一个字符数组中先后存放多个不同 长度的字符串,则应使数组长度大于最长的字符串的长度。

  对字符数组初始化的方法补充一种方法,可以用字符串常量来使字符数组初始化。

如:char c[] = {"I am happy"};

也可以省略花括号直接写成

char c[] = "I am happy";

  不是用单个字符作为初值,而是用一个字符串作为初值,显然这种方法直观,方便,符合人们的习惯,数组c 的长度不是10而是11,这点要注意,因为字符串常量的最后由系统加上一个 '\0' 因此上面的初始化与下的初始化等价。

char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y', '\0'};

而不与下面的等价

char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y'};

如果有

char c[10] = {"China"};

数组c 的前5个元素为 'C','h','i','n','a' 第6个元素为 '\0' 后4个元素为空字符

C h i n a \0 \0 \0 \0 \0

说明,字符数组并不是要求它的最后一个字符为 '\0' ,甚至可以不包含 '\0' 像下面的写法完全是合法的

char c[5] = {'C', 'h', 'i', 'n', 'a'};

是否需要加 '\0' 完全根据需要决定,但是由于系统对字符串常量自动加一个 '\0' 因此人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组也常常人为加上一个 '\0' 如

char c[6] = {'C', 'h', 'i', 'n', 'a', '\0'};

5 字符数组的输入输出

(1)逐个字符输入输出,用格式符 %c

(2)将整个字符串一次输入或输出,用 %s

如:

char c[] = "China";

printf("%s", c);

输出时遇结束符 '\0' 就停止输出,输出结果为 China

注意:

输出字符不包括结束符 '\0'

用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名

printf("%s", c[2]);//这样是不正确的

如果数组长度大于字符串的实际长度,也只输出到遇到 '\0' 结束

如:char c[10] = "China";

也只输出 China 5个字符,而不是输出10个字符,这就是用字符串结束标志的好处。

如果一个字符数组中包含一个以上的 '\0' 则遇第一个 '\0' 时输出结束

可以用scanf函数输入一个字符串,例如

scanf("%s", c);

scanf函数中的输入项c是字符数组名,它应该在先前被定义,从键盘输入的字符串应短于已定义的字符数组的长度。

如:char c[6];

从键盘输入:

China

系统自动在后面加一个 '\0' 结束符,如果利用scanf函数输入多个字符串,则以空格分隔如:

char str1[5], str2[5], str3[5];

scanf("%s%s%s", str1, str2, str3);

输入数据:

How are you?

输入后 str1, str2, str3 数组状态如下:

H o w \0

a r e \0

y o u ? \0

如果改为好下:

char str[13];

scanf("%s", str);

输入数据:

How are you?

实际上并不是把这12个字符加上 '\0' 送到数组 str 中,而是将空格前的字符 How 送到 str 中,由于把 How 作为一个字符串处理,因此在其后加 '\0'  str 数组状态如下:

H o w \0

需要注意:scanf函数中的输入项是字符数组名,输入项为字符数组名,不要加地址符 & 因为在C语言中数组名代表该数组的起始地址, 下面的写法是不对:

scanf("%s", &str);

posted on 2011-06-24 21:26  qkhhxkj  阅读(8747)  评论(0编辑  收藏  举报