C语言的字符数组

本文介绍了C语言中如何定义字符数组,字符数组的初始化方法,以及字符串的概念、结束标志和输入输出。重点讲解了字符串作为字符数组的应用,包括如何处理字符串长度、输入输出技巧和使用’scanf’函数接收字符串。
摘要由CSDN通过智能技术生成

C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的

1.怎么样定义字符数组

用来存放字符数据的数组是字符数组,在字符数组中的一个元素内存放一个字符,例如:

char c[10];
c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]='';

由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整形数组来存放字符数据,例如:

int c[10]; //合法,但是浪费内存空间
c[0] = 'a';

2.字符数组的初始化

对字符数组初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中各元素,例如:

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

把十个字符依次赋给c[0]~c[9]这十个元素。

如果在定义字符数组的过程中不进行初始化,则数组中各元素的值是不可预测的,如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即’\0’)。

例如:

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

如果提供的初值个数与预定的数组长度相同,在定义时可以忽略数组长度,系统会自动根据初值个数确定数组长度,例如:

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

数组c的长度自动定义为10,用这种方式可以不必人工去数字符的个数,尤其在赋初值的字符个数较多的时,比较方便。

3,字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的,用一个一维的字符数组来存放字符串"I am a
student."的,字符串中的字符是逐个存放到数组元素中的,在该例中,字符串的实际长度与数组长度相等。

在实际工作中,人们关心的往往是字符串的有效长度而不是字符数组的的长度。例如:定义一个字符数组为100,而实际有效字符只有40个。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’\0’作为结束标志,如果字符数组中存有若干字符,前面9个字符都不是空字符(’\0’),而第10个字符是‘\0’,则认为数组中有一个字符串,其有效字符为9个,也就是说,在遇到’\0’时,表示字符串结束,把它前面的字符组成一个字符串。

C系统在用字符数组储存字符串常量时会自动加一个’\0’作为结束符,例如“C program”共有9个字符,字符串是存放在一维数组中的,在数组中它占10个字节,最后一个字节’\0’是由系统自动加上的。

有了结束标志‘\0’后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测’\0’的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。

4,字符数组的输入输出

字符数组的输入输出可以有两种办法
(1).逐个字符输入输出。用格式符“%c”输入或输出一个字符
(2).将整个字符串一次输入或输出,用"%s"格式符,意思是对字符串(string)的输入输出,例如:

char c[]={" China"};
printf("%s\n",c);

1,输出的字符中不包括结束符’\0’。
2,用"%s"格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。写成下面这样是不对的!

printf("%s",c[0]);

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

char c[10]={"China"};
printf("%s",c);

只输出字符串的有效字符"China",而不是输出10个字符,这就是字符串结束标志的好处。

4,如果一个字符数组中包含一个以上’\0’,则遇到第一个’\0’时输出就结束。
5,可以用scanf函数输入一个字符串,例如:

scanf("%s",c);

scanf函数中的输入项C是已定义的字符数组名,输入的字符串应短于以定义的字符数组的长度,例如:

char c[6];
从键盘输入:
China

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

char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
输入数据:
How are you?

scanf函数中的输入项如果是祖父数组名,不要再加地址符&,因为在C语言中数组名代表数组第一个元素的地址(或者说数组的起始地址)

内容取自谭浩强C语言课程————字符串数组

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值