初始化字符时,可以使用如下两种方式:
char c=' '
; //
始初化为空格
char c='\0'
; //
始初化为字符0
不能仅仅使用两个单引号(char c="),那将产生如下编译错误。
error C2137
: empty character constant
如果使用双引号,或者带空格的双引号,会给出警告信息。
【例14.2】不正确的初始化方法。
#include <stdio.h>
void main
()
{
char s='w'
,c=""
;
printf
("%c\n"
,c
);
c=s
;
printf
("%c\n"
,c
);
}
编译信息如下:
warning C4047
:'initializing'
:'char' differs in levels of indirection from 'char [1]'
运行结果如下:
w
虽然程序也可能正确运行,但希望不要采取这种不恰当的方式。
字符串的初始化可以直接使用双引号,也可以用空格符,即
char s[4]=""
;
char s[4]=" "
;
都是可以的。到底初始化有没有好处?通过研究下面例子,可以清楚地理解这个问题。
【例14.3】演示因为没有初始化字符串而产生错误的例子。
#include <stdio.h>
void main
()
{
int i=0
;
char s[10]=""
;
char c[10]
;
for
(i=0
;i<4
;i++
){
s[i]='a'+i
;
c[i]='a'+i
;
}
printf
("%s\n"
,s
);
printf
("%s\n"
,c
);
}
初始化的字符串会自动产生一个结束符“\0”,而没有被初始化的字符串则没有这个结束符,所以上面程序中的字符串s可以正常工作,而c则不行。输出结果如下:
abcd
abcd
烫烫烫烫abcd
对于字符数组c,需要为它再增加一个结束符,即在循环结束之后,增加一条为字符数组c添加结束符的语句。例如可以将上面程序的最后一条语句“printf("%s\n",c);”改为
c[4]='\0'
;printf
(c
);printf
("\n"
);
即可输出正确结果。
注意字符串虽然就是字符数组,但与数值数组不一样,一定要注意两者的异同。