'\0'就是8位的00000000,因為字元類型中並沒有對應的這個字元,所以這麼寫。在數實值型別裡就代表數字0。
數實值型別儲存時,最高位決定加號或減號,其他位都為0可不就是0了嗎?
'\0'是轉譯字元,意思是告訴程式,這不是字元0,我要的是數字0的2進位直接放進來,因為acsii碼的0可不是00000000
原來,在C語言中沒有專門的字串變數,通常用一個字元數組來存放一個字串。字串總是以'\0'作為串的結束符。因此當把一個字串存入一個數組時,也把結束符 '\0'存入數組,並以此作為該字串是否結束的標誌。有了'\0'標誌後,就不必再用字元數組的長度來判斷字串的長度了。
'\0'就是 字串結束標誌。
比如說,把一個字串賦值給數組:
u8 str1[]={"cxjr.21ic.org"};
實際上數組str1在記憶體中的實際存放情況為:
c x j r . 2 1 i c . o r g '\0'
這後面的'\0'是由C編譯系統自動加上的。所以在用字串賦初值時一般無須指定數組的長度, 而由系統自行處理。
把字元數組str1中的字串拷貝到字元數組str2中。串結束標誌'\0'也一同拷貝。
但是……也有一些例外情況發生。
比如,當數組長度不夠。假設我們指定了數組長度,如:
u8 str1[13]={"cxjr.21ic.org"};
由於字元組str1的長度為13,所以後面的資訊會丟失,即'\0'丟失。
另外,如果在給數組賦值時,把每個字元單獨用引號括起來。也會丟失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望數組以'\0'結束,則要麼寫成:
u8 str1[]={"cxjr.21ic.org"};
要麼寫成(人工添加'\0'):
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'};
要麼寫成(故意給數組預留一個空位):
u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};