程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C++中字符串的結尾標志\0

C++中字符串的結尾標志\0

編輯:關於C語言

    \0是C++中字符串的結尾標志,存儲在字符串的結尾,它雖然不計入串長,但要占一個字節的內存空間。在百度百科中查看\0詞條,會有這樣一句話:c/c++中規定字符串的結尾標志為'\0'。有人可能認為,在C語言裡(C++會不同),'\0'並不是字符型,而是int型。在這裡,我們姑且和百度詞條作者保持一致,認為\0與'\0'是等價的。由於不同處理器的位數不同,'\0'並不一定是8位的00000000。實際上,由於不同處理器的位數不同,sizeof(int)返回的結果也都不同,而sizeof(char)返回結果一般是1,對8位機來說,一個字節由8位組成,16位機一個字節由16位組成,我們通常用的電腦通常是32位的,即一個字節由32位組成,現在已經是64位機了。CPU一般是以字節為單元進行讀取的。但是一般情況下大家還是認同1Byte等於8bit的說法,因為這是構成的最小位數。

    '\0'是轉義字符,意思是告訴程序,這不是數字0。'\0'和0兩者基本上可以通用,例如: string[i] != '\0'和string[i] != 0是一樣的。不過'\0'的類型是char型,而0是int類型,所以在大多數計算機上,sizeof(0) = 4而sizeof('\0') = 1,這在特殊情況下不可通用。另外擴展一下,'\0'與'0'也是不同的,他們都是字符,但是他們的ASCII碼是不同的:'\0' ASCII碼值為0,'0' 也可以寫成'\0x30' ASCII碼值為48。

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

    '\0'就是 字符串結束標志。比如說,把一個字符串賦值給數組:char str1[] = {"Welcome!"}。實際上數組str1在內存中的實際存放情況為: 'W' 'e' 'l' 'c' 'o' 'm' 'e' '!' '\0'。這後面的'\0'是由C編譯系統自動加上的。所以在用字符串賦初值時一般無須指定數組的長度, 而由系統自行處理。 把字符數組str1中的字符串拷貝到字符數組str2中。串結束標志'\0'也一同拷貝。 

    但是……也有一些例外情況發生。比如,假設我們指定了數組長度但數組長度不夠。

    如:char str1[8] = {"Welcome!"}。由於字符組str1的長度為8,所以後面的信息會丟失,即'\0'丟失。

    另外,如果在給數組賦值時,把每個字符單獨用引號括起來,也會丟失'\0'。

    例如:char str1[] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!'};

    如果希望數組以'\0'結束,則要麼寫成:char str1[] = {"Welcome!"};

    要麼寫成(人工添加'\0'):char str1[] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!', '\0'};

    要麼寫成(故意給數組預留一個空位):char str1[9] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!', '\0'};

    最後,有興趣的童鞋可以思考一下'\0'與NULL的區別,你會發現C語言中我們還有很多細節沒有注意到。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved