C語言中字串結束符 0

2021-09-22 11:14:16 字數 1197 閱讀 3469

本質

'\0'就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。'\0'就是 字串結束標誌。

'\0'是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元\0對應的二進位制為00000000,而數字0為00110000

原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個字串。字串總是以'\0'作為串的結束符。因此當把乙個字串存入乙個陣列時,也把結束符 '\0'存入陣列,並以此作為該字串是否結束的標誌。有了'\0'標誌後,就不必再用字元陣列的長度來判斷字串的長度了。

說明

把乙個字串賦值給陣列:u8 str1=;

實際上陣列str1在記憶體中的實際存放情況為: 

c x j r . 2 1 i c . o r g '\0' 

這後面的'\0'是由c編譯系統自動加上的。所以在用字串賦初值時一般無須指定陣列的長度, 而由系統自行處理。 

把字元陣列str1中的字串拷貝到字元陣列str2中。串結束標誌'\0'也一同拷貝。

個案

1. 當陣列長度不夠。假設我們指定了陣列長度,如:u8 str1[13]=;

由於字元組str1的長度為13,所以後面的資訊會丟失,即'\0'丟失。

2. 如果在給陣列賦值時,把每個字元單獨用引號括起來。也會丟失'\0'。如:

u8 str1=;

如果希望陣列以'\0'結束,則可以寫成以下三者之一:

u8 str1=; //字串賦值

u8 str1=; //人工新增

u8 str1[14]=; //故意給陣列預留乙個空位

程式例證

#include #include 

#include

using

namespace

std;

intmain()

; cout

<< sizeof(u) / sizeof(*u) <

char v = "

hello";

cout

<< sizeof(v) / sizeof(*v) <

}

結果

C語言中字串結束符 0

本質 0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存...

C語言字串結束符

0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個...

字元拷貝時字串結束符 0 很重要

近期由於memcpy字串的時候,沒有將結束符拷貝進去,導致字串結尾有亂碼,如圖 std ostringstream osg osg.str osg string p osg.str int len strlen p.c str char buffer new char len memcpy buff...