下面的代碼片段給出了在Turbo C++編譯器意外輸出:代碼給意想不到的輸出在C
char a[]={'a','b','c'};
printf("%s",a);
爲什麼沒有這種打印abc
?在我的理解中,字符串實現爲一個維字符數組在C
其次,就是%s
和%2s
之間的區別?
下面的代碼片段給出了在Turbo C++編譯器意外輸出:代碼給意想不到的輸出在C
char a[]={'a','b','c'};
printf("%s",a);
爲什麼沒有這種打印abc
?在我的理解中,字符串實現爲一個維字符數組在C
其次,就是%s
和%2s
之間的區別?
這是因爲你的字符串不是零終止。這將工作:
char a[]={'a','b','c', '\0'};
%2s
指定打印輸出的最小寬度。由於您正在打印3個字符的字符串,因此將被忽略。如果您使用%5s
,但是,你的字符串將左側有兩個空格填充。
char a[]={'a','b','c'};
那麼一個問題是,字符串必須空終止:
char a[]={'a','b','c', 0};
因爲你不使用的字符串。要被視爲一個字符串,你需要'空終止':'\ 0'或0(是的,沒有引號)。
char a[] = {'a', 'b', 'c', '\0'};
,或者使用編譯器在你身邊:
您可以通過兩種方式初始化的實現這一
char a[] = "abc";
零反斜槓非常好,它表示(char)0,它終止字符串。我看不出降低投票的原因。 +1。 – 2012-05-04 19:43:39
沒有改變原來的字符數組,你也可以使用
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);
每當我們存放在C語言中的字符串,我們總是有一個多餘的字符在最後識別字符串的結尾。
使用額外的字符是null
字符'\0'
。 在上面的程序中,你缺少空字符。
您可以定義字符串
char a[] = "abc";
,以獲得期望的結果。
這種情況非常明顯,但將來它會告訴我們程序*正在做什麼(除了「不能正常工作」)以及您期望*除了做什麼以外,否則我們只能猜測問題可能是什麼。 –