問: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結束符,而陣列不需要!
什麼是字串?就是以雙引號引起來的資料才叫字串。字元陣列可以儲存字串!
1char 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一樣會忽...