2012-05-04 25 views
2

下面的代碼片段給出了在Turbo C++編譯器意外輸出:代碼給意想不到的輸出在C

 char a[]={'a','b','c'}; 
    printf("%s",a); 

爲什麼沒有這種打印abc?在我的理解中,字符串實現爲一個維字符數組在C
其次,就是%s%2s之間的區別?

+3

這種情況非常明顯,但將來它會告訴我們程序*正在做什麼(除了「不能正常工作」)以及您期望*除了做什麼以外,否則我們只能猜測問題可能是什麼。 –

回答

5

這是因爲你的字符串不是零終止。這將工作:

char a[]={'a','b','c', '\0'}; 

%2s指定打印輸出的最小寬度。由於您正在打印3個字符的字符串,因此將被忽略。如果您使用%5s,但是,你的字符串將左側有兩個空格填充。

3
char a[]={'a','b','c'}; 

那麼一個問題是,字符串必須空終止:

char a[]={'a','b','c', 0}; 
1

因爲你不使用的字符串。要被視爲一個字符串,你需要'空終止':'\ 0'或0(是的,沒有引號)。

char a[] = {'a', 'b', 'c', '\0'}; 

,或者使用編譯器在你身邊:

您可以通過兩種方式初始化的實現這一

char a[] = "abc"; 
+0

零反斜槓非常好,它表示(char)0,它終止字符串。我看不出降低投票的原因。 +1。 – 2012-05-04 19:43:39

2

沒有改變原來的字符數組,你也可以使用

 char a[]={'a','b','c'}; 
    printf("%.3s",a); 
or 
    char a[]={'a','b','c'}; 
    printf("%.*s",sizeof(a),a); 
or 
    char a[]={'a','b','c'}; 
    fwrite(a,3,1,stdout); 
or 
    char a[]={'a','b','c'}; 
    fwrite(a,sizeof(a),1,stdout); 
0

每當我們存放在C語言中的字符串,我們總是有一個多餘的字符在最後識別字符串的結尾。

使用額外的字符是null字符'\0'。 在上面的程序中,你缺少空字符。

您可以定義字符串

char a[] = "abc"; 

,以獲得期望的結果。