C 定義字元陣列

2021-09-07 09:11:48 字數 1554 閱讀 2569

問: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"34

//szbufc[5]="abcd1";

//編譯報錯 error c2440: 「=」: 無法從「const char [6]」轉換為「char」56

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"

1314

int na = sizeof(szbufa);//

na=5

15int naa = strlen(szbufa);//

naa=4

16int nb = sizeof(szbufb);//

nb=5

17int 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'結束符)。

C 中定義陣列 字串及陣列操作

c 中定義陣列 字串及陣列操作 一 一維 int numbers new int 不定長 int numbers new int 3 定長 二 多維 int numbers new int 不定長 int numbers new int 2,2 定長 三 例子 a int mf1 new int 6...

C 定義字串陣列的方法

總結 將陣列元素型別最好定義為string型別,而不是char 型別 vs2017無法通過 include using namespace std intmain 會出現 warning deprecated conversion from string constant to char wwrit...

字元陣列定義和使用

visual studio中多行注釋快捷鍵 用滑鼠選中要注釋的 然後,先按ctrl k 組合鍵,再按 ctrl c 組合鍵進行注釋 include include intmain int i 0 char c while scanf c c eof a i c i 輸出字串 s s和 d,f一樣會忽...