C++定義字符數組


問:C++中定義字符型數組時'\0'是不是也占一位?是不是定義char a[5],只能有4個字符?那計算字符長度時又否忽略'\0'?

答:

C++中定義字符型數組時'\0'是不是也占一位?是不是定義char a[5],只能有4個字符,(是的,如果你把這個字符數組看成一個字符串的話,這里應該是最多4個字符,)
那計算字符長度時又否忽略'\0'? (是的)

解釋:

定義char a[5],則說明,a是個字符數組,在內存中占五個字節空間
如果用a來存儲字符串,則最多只能有4個有效字符,必須給\0留個空間。

計算a的長度與a的大小是不同的概念
a按字符串來算長度是從a這個地址開始,計數到\0字符,這之間的字符個數是字符串a的長度。
一般常用strlen()函數來獲取字符串長度。
計算a的大小用sizeof命令,sizeof(a)得到的是a在內存中占的字節數!

字符串與字符數組不要混為一談。它們相同在形式上,區別就在,字符串一定有\0結束符,而數組不需要!
什么是字符串?就是以雙引號引起來的數據才叫字符串。字符數組可以存儲字符串!

示例:

 1     char szbufA[5]="ABCD";
 2     //szbufA表達式的值:0x0035f9bc "ABCD"
 3 
 4     //szbufC[5]="ABCD1"; //編譯報錯 error C2440: “=”: 無法從“const char [6]”轉換為“char”
 5     
 6     char szbufB[5];
 7     szbufB[0]='a';
 8     szbufB[1]='b';
 9     szbufB[2]='c';
10     szbufB[3]='d';
11     szbufB[4]='e';
12     //szbufB表達式的值:0x0035f9ac "abcde燙燙燙燙燙藺BCD"
13     
14     int na = sizeof(szbufA);//na=5
15     int naa = strlen(szbufA);//naa=4
16     int nb = sizeof(szbufB);//nb=5
17     int nbb = strlen(szbufB);//nbb=20

 從以上代碼的1-12行代碼中可以看出,定義字符數組時,使用字符串初始化只能使用長度為數組大小(n-1)的字符串。使用大於等於字符數組長度的字符串初始化會報錯。

從以上代碼第2、12和17的代碼中可以看出,使用五個字符分別給szbufB字符數組賦值,導致szbufB數組沒有'\0'結束符,szbufB數組的表達式值是錯誤的,szbufB的長度不是5,而是20了。

把szbufB字符數組拷貝到其他字符數組或者字符串地址時,拷貝的內容可能會出錯。因為szbufB數組沒有'\0'結束符。

 

總結:定義字符數組保存字符串時,字符數組大小= 字符串長度 + 1。sizeof數組名,是計算數組占用字節的大小。strlen數組名,是計算數組中字符串的長度(不包括'\0'結束符)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM