4.3 字符数组和字符串1.字符数组
% o k+ W! J6 g$ m: P1 e+ ~ 如不美观数组的元素类型是字符型(char),则此数组就是字符数组。字符数组的每个元素只能存放一个字符( 存放字符的ASCII代码)。6 l' ?% _1 H' V& |
字符数组的界说形式与其它数组的界说形式一样:! N3 y2 X" S4 m
char字符数组名[元素个数];7 X( |: L; J* f6 p M7 v( V
例如:
7 r: O5 a# E2 Z. ~6 { char S[5];
. n. J/ H+ [8 B4 `. c 暗示数组S有五个元素,每个元素能存放一个字符,整个数组最多可存放五个字符。字符数组元素的引用体例也与通俗数组元素的引用体例不异。
8 x! ?5 X+ n1 X9 F8 C( p& r5 X8 ~; } 字符数组也可与通俗数组一样的初始化,字符数组也可操作字符串常量给字符数组初始化。例如:, |/ [2 }4 H6 w) g8 x
char aStr[]={“12345”};
# \. z# h. w! h' ] 并可省略花括弧,简单地写为:
. ^- o# Z2 D) p* ~0 Z9 @7 `$ \/ P char aStr[]=“ 12345” ;3 e% K0 d* @4 E
注重:字符数组aStr[]的元素有六个,不是五个。用字符串常量对字符数组初始化,C系统会在字符列末尾添加一个字符串竣事符。
+ c( V, s: [. U/ w2.字符串
( Y$ I7 V' K. i 称最后有字符率竣事符‘\0’的字符序列为字符串。字符数组中存储的字符序列自己并不要求最后必然要有字符‘\0’。但当字符数组内存储的内容需要作为字符串时,就必需要有标识表记标帜符‘\’。当字符数组内存储的是字符串时,可用“%s”名目输出,若是通俗的字符序列,则它不能用名目“%s”输出,而只能连系轮回用名目“%c”输出。9 X8 e- O" N# x( ^9 c5 g
指定元素个数的字符数组用字符串常量给它初始化时,其元素个数不能小于字符串常量的字符数,但数组的元素个数可以等于字符串常量的字符数。例如:
0 v, t1 b7 G; y+ x! X1 H! N+ X, p char ss[3]=“abc”;
& K3 f2 O5 z M 则, ss[0]=‘a’,ss[l]=‘b’, ss[2]=‘c’。此时,字符数组ss中存储的是字符序列,不是字符串。/ y0 i0 ]1 | d
字符率竣事标识表记标帜符的代码是8位全0,称为空字符,轨范用‘\0’来标识表记标帜。字符串的竣事标识表记标帜符紧接在字符串的有用字符列之后。例如,一个有8个有用字符的字符串,其长度为8个字符,但在它的第九个位置存有竣事标识表记标帜符‘\0’。
) M8 Q% Y0 n, O& p1 }0 ~2 R3 F 请读者注重以下几点:
9 H; S: ^, } K; g" V (1)字符率与存储字符串的字符数组有区别。字符率的有用字符是指概缦悝指位置的第一个字符起头至字符串竣事标识表记标帜符之前的那些字符。名目符“%s”只输出字符串的有用字符,而不会再继续输出字符率竣事标识表记标帜符及其之后的字符。例如:' _. T' { l# w$ b
char str[50]=“Pas\0cal Cobol Fortran C”;
# I/ u' E' _/ X: ~% q& h: C. i( b1 d5 l printf(“%s\n”,str);5 u" J0 C9 g/ m! `# {
将只输出:
! t7 h) B+ E" v- U. g+ H6 H Pas
3 Y1 k+ Y6 U" l6 v- U 而现实上,数组str[]字符率竣事符之后还存有其它良多字符。
% ^. x8 f$ x% B( ~6 G0 Z+ S3 H- u (2)用“%s”名目输出字符串时,不搜罗字符串竣事标识表记标帜符。对应的输出项是字符串或字符串名。字符数组名可作为字符串名。对于上例,写成:
6 O% u: s& f$ R printf(“%s”,s[0]);5 k1 K8 }& e$ d% q
是错误的。因s[0]是数组s的元素,是一个字符,不是字符串。
* {- x' k! [8 r! g M (3)在挪用scanf()为字符数组输入字符串时,输入项是数组名,不要加地址运算符&。. }& i8 y. ], k7 V* j
(4)若用“%c”名目连系轮回输入字符序列,若轨范又想将输入的字符序列组成字符串,则轨范必需用赋值语句在字符列之后存入字符串竣事标识表记标帜符,使其酿成字符串。3 u% b# M: g* K0 L: J8 k
轨范经常要措置许良多多的字符串,如存储礼拜的名称。同时存储众多字符串的一个实现体例是界说一个二维字符数组,让二维数组的每一行存储一个字符串。这样做,要求数组每行元素个数应比可能最长的字符串字符个数还要多1个。如下面的示例所示:5 E ~3 y$ M& ?1 _" f
char weekDay[][9]= {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “ Friday”, “Saturday”};) {( ?$ c' `) E& L3 t2 x. N
2 m- p2 t0 l/ ]0 P. V- `
在C轨范中,存储多个字符串更好的体例是用指针数组。 |