4.3.2 一维字符数组的初始化
一维字符数组的初始化有以下几种方法。
方法1:
char c[6]={n,i,,h,a,o};
用大括号将6个字符数据赋值给字符数组c的六个数组元素。
初始化的结果为:

定义数组时不赋初值,然后用字符给数组元素单个赋初值,这样初始化的结果和方法1的结果是一样的。
方法3:
![]()
只给部分元素赋初值,那么没有赋值的那些元素默认为空字符(即\0)。
注意:空字符是空操作,即什么也不做,不是空格,也不是0,而是ASCII码表中值为0的字符,空格的ASCII码为32,字符0的ASCII码为48。
方法4:
char c[6]={"ni hao"};
或
char c[6]="ni hao";
可以用一个字符串来初始化数组。字符串是多个字符的有序排列。
注意:字符串是用双引号引起来的多个字符,也可以是单个字符。而字符是单引号引起来的一个字符,只能是一个字符。(https://www.daowen.com)
例4-9 用字符串“nihao”初始化数组,并输出该字符串。
程序如下:


注意:在定义字符数组长度时,由于是用字符串初始化字符数组,定义的数组长度要尽量大一些。因为在C语言中,规定了字符串的结束标志是空操作,即\0。因此用字符串初始化字符数组时,会在字符串结束的位置自动添加空操作\0,它表示什么也不做,不会附加任何操作,但是要占用一个字符元素的位置。因此如果用5个字符长度的字符串“nihao”来定义字符数组,那么字符数组c至少要定义6个元素的大小。如果用c[5]来定义数组,在运行时会出现错误。
在程序中,可以省略数组的长度,直接用字符串初始化字符数组。
char c[]="ni hao";
如果用字符来初始化字符数组,就不用考虑字符串以\0结尾的问题了。
方法5:
scanf("%s",c);
使用scanf函数来初始化数组各元素。格式控制字符串用“%s”表示按字符串的格式输入字符串,用数组名c表示数组在内存中存储的地址。程序如下:

思考:如果输入的是ni ha,中间加了空格,结果会怎样?
运行结果为:

由此可见,运行结果会出现乱码。这是因为输入字符串时,会自动以空格作为输入字符串结束的标志,因此虽然输入了5个字符“ni ha”但是只有“ni”赋值给了数组,后面的三个字符并没有赋值给数组,因此数组里存储的有效字符是“ni”,也就是c[0]=n,c[1]=i,c[2]=\0,c[3]=\0,c[4]=\0,c[5]=\0。因此在输出所有数组元素时后面的四个元素出现了乱码。