C中哪些方式定義的字串,其末尾會自動新增 0

2021-10-01 13:49:35 字數 3049 閱讀 2957

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

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

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

『\0』:即空字元,在c語言中,字元是按其所對應的ascii碼來儲存的,乙個字元佔乙個位元組。ascii碼表如下:

bin(二進位制)

oct(八進位制)

dec(十進位制)

hex(十六進製制)

縮寫/字元

解釋0000 0000

0x00

nul(null)

空字元

字串結束標誌為『\0』

判斷乙個字串是否結束的標誌就是看是否遇到『\0』,如果遇到『\0』,則表示字串結束。

(1)、char str="12345";

或給字串加上大括號:char str=;

或 char str[6]="12345"

這種方法定義時,系統會自動在字串的末尾加上字串結束符,即 『\0』,

(2)、char str[10]=;

這種方法定義時,系統會自動從未初始化的元素開始,將之後的元素賦為\0,如上面的陣列str中的元素實際上是:'1','2','3','4','5','\0','\0','\0','\0','\0'

(3)、char str=;

這種方法定義時,系統不會自動在字串的末尾加上字串結束符;

此時用sizeof()函式可以正確求出其所佔的記憶體大小;但用strlen()函式不能正確求出其長度,因為strlen是通過\0判斷字串結束的。

所以,採用該方法定義時,一般人為地加上\0,即char str=;

既:

char str=;

char str[6]=; //故意給陣列預留乙個空位

char str=;

**示例:

#include #include using namespace std;

int main()

; const char *str3 = "12345";

char str4 = ;

char str5 = ;

printf("%d,%d,%d,%d,%d,%d\n", str2[5], str2[6], str2[7], str2[8], str2[9], str3[4]);

printf("各個字串為:%s,%s,%s,%s,%s\n", str1, str2, str3, str4, str5);

printf("各個字串的所佔的記憶體大小為:%d,%d,%d,%d,%d\n", sizeof(str1), sizeof(str2), sizeof(str3), sizeof(str4), sizeof(str5));

printf("各個字串的有效長度為:%d,%d,%d,%d,%d\n", strlen(str1), strlen(str2), strlen(str3), strlen(str4), strlen(str5));

printf("%d\n", strcmp(str1, str3));

printf("%d\n", strcmp(str1, str5));

return 0;

}

執行結果:

只能採用字串的方式初始化:char *str3="12345";

注意:字元指標可以用字串常量初始化和賦值;

即:char *str3;str3="12345";也是可以的

此時也可以用str3[4]的形式訪問其中的元素,如cout<< str3[4];就會輸出str指向的字串的第四個元素。

該方法也是自動加上了字串結束符的。

字串結束符'\0' -何時自動加- 字串定義方法

c語言中字串結束符'\0'

答案是:會自動新增『\0』,用程式進行驗證:

#include #define myphone "at+cmgs"

unsigned char sms = "hello, welcome to rccts!";

unsigned char *string;

unsigned char i = 0;

void main()

if (*string == '\0')

else

printf("\n");

printf("myphone=%s\n", &myphone); //列印字串 這裡%s的s必須為小寫

/**************驗證sms字串末尾是否有\0字元****************/

string = sms;

while (*string) //當*string所指向的字元等於\0時跳出迴圈

if (*string == '\0')

else

printf("\nsms=%s\n", &sms); //列印字串 這裡%s的s必須為小寫

}

執行結果:

C語言字串末尾空字元記錄

c語言中字串的儲存方式記錄 一直以來,對於c中的字串儲存的形式模模糊糊的,所以經常會有越界的錯誤發生,這幾天靜下心來,看了看基本c的參考書,現在記錄一下對於字串的儲存,方便自己以後回顧。例 char test 10 scanf s char 這種情況下,如果輸入1234567890就會出錯了,為什麼...

字串中的數字末尾拼接指定的字元

我在給醫院做專案,醫生要求數字末尾都拼接單位,比如 4 9 5mm 8999 3 4 9 2 這一串文字中的數字末尾都拼接乙個單位,變成 4 9 5 mm 8999 3 4 9 2 我的 如下圖所示 片段 數字末尾拼接 符號 int lastendindex 0 matcher matcher pa...

C語言中定義字串的幾種方式

所謂字串本質上就是以 0作為 結尾的特殊字元陣列 由於字串本質上其實就是以 0作為 結尾的特殊字元陣列,所以定義字串時,必須保證字串儲存的最後乙個元素為 0 當我們沒有給定字串具體長度時,我們通過這種方式 char 字串名稱 來定義字串時,就需要手 動的在字串末尾加上 0 不然的話,它就僅僅是乙個字...