介紹
'\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'也一同拷貝。
個案
-
當數組長度不夠。假設我們指定了數組長度,如: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"}; //字符串賦值
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<stdio.h>
int main() {
char s1[] = "test";
char s2[10] = "test";
char s3[4] = "test";
char s4[] = { 't','e','s','t' };
printf(s1);
printf("\n");
printf(s2);
printf("\n");
printf(s3);
printf("\n");
printf(s4);
printf("\n");
return 0;
}
驗證結果

可以看到輸出了奇怪的字符串
調試

在s1和s2中存在“\0”,所以在檢測到出現該位時便結束了程序,在s3和s4中由於不同的原因沒有產生“\0”,所以無法正常結束任務
解決方法
改成如下所示內容即可

輸出結果

輸出結果正常,實驗結束
本文參考文檔
https://www.cnblogs.com/kaituorensheng/archive/2013/12/09/3464462.html
https://blog.csdn.net/qq_34116014/article/details/89298175
