首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》14.2 不要混淆字符和字符串

关灯直达底部

初始化字符时,可以使用如下两种方式:


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");  

即可输出正确结果。

注意字符串虽然就是字符数组,但与数值数组不一样,一定要注意两者的异同。