字符数组的初始化
字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。 (1)用字符常量逐个初始化数组。例如: char a[8]={'i','l','o','v','e','y','o','u'}; 用逐个初始化的方法与数值型数组初始化本质上是一样的,同样也可以进行完全赋初值及不完全赋初值,但是不完全赋值时没有赋值的元素被赋为空格。 当对全体元素赋初值时也可以省去长度说明。例如: char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'}; 这时C数组的长度自动定为9。 (2)字符串常量初始化数组。例如: char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'}; 可写为: char c[ ]={"C program"}; 或去掉{}写为: char c[ ]="C program";字符数组的输入输出
字符数组的输入(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:
for(i=0;i<10;i++)
a[i]=getchar();
用scanf()赋值:
for(i=0;i<10;i++)
scanf("%c",&a[i]);
(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:
scanf("%s",a);
或
scanf("%s“,&a[0]);
输入”C program“并回车时,a数组会自动包含一个以”\0“结尾的字符串”C program“。
字符数组的输出
(1) 用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:
for(i=0;i<10;i++)
a[i]=putchar();
用printf()赋值:
for(i=0;i<10;i++)
printf("%c",a[i]);
输出结果为:
c program
程序:
<span style="font-size:18px;">#include"stdio.h"
int main()
{
char a[]="China";//用双引号""这种方式定义数组,实际数组元素个数总比双引号里的字符多一个,因为数组会查找'\0'这个结束的标志
char b[5]="China";
char c[5]={'C','h','i','n','a'};
char d[]={'C','h','i','n','a'};
printf("a[]:%d\nb[5]:%d\nc[5]:%d\nd[]:%d\n",sizeof(a),sizeof(b),sizeof(c),sizeof(d));
printf("a[]:%s\nb[5]:%s\nc[5]:%s\nd[]:%s\n",a,b,c,d);
return 0;
}</span>
运行结果会是什么呢?
结果分析:
数组a和b的值很容易想清楚
数组c和d为什么会越界输出呢?
因为在c中,以单引号‘’这种方式初始化数组,不可以用printf("%s",数组名);这种方式输出,
但是用双引号“”这种方式就可以用%s加数组名的方式输出