C語言字串輸出不對的問題
阿新 • • 發佈:2018-12-10
1. ‘\0’的問題
用char陣列儲存的時候要特別小心,例如我們要儲存三個數字
int main()
{
char num[3];
num[0]='0';
num[1]='1';
num[2]='2';
printf("%s",num);
return 0;
}
結果
我們輸出了123還有而外的6個字元,我用的是vs2015,開啟記憶體檢視器,根據num的地址定位到num在記憶體中儲存的位置,如下圖所示
printf
輸出的圖上畫紅線的地方,(31) (32) (33) (cccc) (cccc) (cc40) (f82f) (01ce) (1fcc)
最後的00
\0
所以就停止輸出了,至於為什麼這麼多cc
,應該是棧空間未初始化的空間都被初始化成了cc,所見經常喜聞樂見的見到燙燙燙
剛剛是區域性變數,那我們再試一下全域性變數
char num[3];
int main()
{
num[0]='0';
num[1]='1';
num[2]='2';
printf("%s",num);
return 0;
}
結果
正常輸出了123,接下來我們看一下記憶體的情況
記憶體裡存了31 32 33 然後緊接著就是00
,00
會被理解成\0
所以就停止的輸出,全域性變數區不會像堆區那樣初始化成cc
,都是初始化成了00
,所以這才遇見了終止符號,停止了輸出。那是不是全域性變數就不用定義了終止符了呢?那並不是這樣的,當然還是要定義終止符號的!!!
2. 中文的問題
這個問題就相對比較簡單了,中文用兩個位元組來儲存,意思就是char c[2]
只能儲存一箇中文字元,這可能是初學時容易忽略的問題。
編譯器:VS2015