初始化字符時,可以使用如下兩種方式:
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" );
即可輸出正確結果。
注意字符串雖然就是字符數組,但與數值數組不一樣,一定要注意兩者的異同。