讀古今文學網 > C語言解惑 > 14.2 不要混淆字符和字符串 >

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則不行。輸出結果如下:


abcd
abcd
燙燙燙燙abcd
  

對於字符數組c,需要為它再增加一個結束符,即在循環結束之後,增加一條為字符數組c添加結束符的語句。例如可以將上面程序的最後一條語句「printf("%s\n",c);」改為


c[4]='\0'
;printf 
(c
);printf 
("\n"
);
  

即可輸出正確結果。

注意字符串雖然就是字符數組,但與數值數組不一樣,一定要注意兩者的異同。