C語言中字串結束符'\0'
阿新 • • 發佈:2019-01-13
轉自:http://www.cnblogs.com/kaituorensheng/archive/2013/12/09/3464462.html
本質
'\0'就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。'\0'就是 字串結束標誌。
'\0'是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元\0對應的二進位制為00000000,而數字0為00110000
原來,在C語言中沒有專門的字串變數,通常用一個字元陣列來存放一個字串。字串總是以'\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'也一同拷貝。
個案
1. 當陣列長度不夠。假設我們指定了陣列長度,如:u8 str1[13]={"cxjr.21ic.org"};
由於字元組str1的長度為13,所以後面的資訊會丟失,即'\0'丟失。
2. 如果在給陣列賦值時,把每個字元單獨用引號括起來。也會丟失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望陣列以'\0'結束,則可以寫成以下三者之一:
- u8 str1[]={"cxjr.21ic.org"}; //字串賦值
- 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'}; //故意給陣列預留一個空位
程式例證
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int main() { char s[] = "10"; printf("%s\n", s); printf("s[1]:%d\n", s[1]); printf("s[2]:%d\n", s[2]); printf("s[1]:%c\n", s[1]); printf("s[2]:%c\n", s[2]); char u[] = {"hello"}; cout << sizeof(u) / sizeof(*u) << endl; char v[] = "hello"; cout << sizeof(v) / sizeof(*v) << endl; }
結果