字符数组初始化

时间:2021-11-26 19:50:59

字符数组的初始化

字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。
(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加数组名的方式输出