1. 程式人生 > >C語言字串輸出不對的問題

C語言字串輸出不對的問題

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 然後緊接著就是0000會被理解成\0所以就停止的輸出,全域性變數區不會像堆區那樣初始化成cc,都是初始化成了00,所以這才遇見了終止符號,停止了輸出。那是不是全域性變數就不用定義了終止符了呢?那並不是這樣的,當然還是要定義終止符號的!!!

2. 中文的問題

這個問題就相對比較簡單了,中文用兩個位元組來儲存,意思就是char c[2]只能儲存一箇中文字元,這可能是初學時容易忽略的問題。

編譯器:VS2015