初始化字符时,可以使用如下两种方式:
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" );
即可输出正确结果。
注意字符串虽然就是字符数组,但与数值数组不一样,一定要注意两者的异同。