C++字元數組為什麼實際可用長度為定義長度-1?
02-09
例如如下代碼
#include &
using namespace std;int main(){
char a[2]="a";
// char a[2]="ab"; 不允許a[1]=b;
cout&<&C++中字元數組最後一位默認為 ,為什麼要會有這種機制
而在C語言中字元數組定義多長就能存多少個數組,那C語言是如何判斷一個字元串的結束的。
理解錯誤,字元數組不要求末尾為零。但字元串要求。
你使用字元串初始化字元數組自然出現這種情況。
如果你使用數組的形式初始化就沒有問題。例如:
#include &
int main ()
{
int i;
char ca[3] = { a, b, c };
for (i=0; i&<3; i++) {
printf("%c", ca[i]);
}
printf("
");
int ia[3] = { 1, 2, 3 };
for (i=0; i&<3; i++) {
printf("%d", ia[i]);
}
printf("
");
return 0;
}
該例子中三元素的字元數組可以存放三個字元,三元素的整數數組可以存放三個整數。
這種本身就是C中定義的,用 表示字元串結束。
哪來的什麼C++字元數組實際可用長度為定義長度-1這回事?
字元串中隱含了終止字元,所以「ab」其實是三個字元。c也是用 做字元串結束符的。如果字元型數組中間有終止字元,列印的時候就會到此為止,不會輸出數組中剩下的字元。
這個機制是因為列印字元串的時候用的指針,一個地址一個地址的打出來,直到地址中放的是終止符時停止列印。
我還以為c++的cout能自己識別數組長度呢,搞得我還去寫了一下你這程序。你的程序最終打出來是ab和亂碼,會打出來亂碼的原因就是因為列印函數列印到終止符為止導致的。建議你把數組的地址打出來看看,就清楚多了。推薦閱讀: