初始化字符时,可以使用如下两种方式:
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则不行。输出结果如下:
abcdabcd烫烫烫烫abcd
对于字符数组c,需要为它再增加一个结束符,即在循环结束之后,增加一条为字符数组c添加结束符的语句。例如可以将上面程序的最后一条语句“printf("%s/n",c);”改为
c[4]='/0';printf (c);printf ("/n");
即可输出正确结果。
注意字符串虽然就是字符数组,但与数值数组不一样,一定要注意两者的异同。