C++字元數組為什麼實際可用長度為定義長度-1?

例如如下代碼

#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和亂碼,會打出來亂碼的原因就是因為列印函數列印到終止符為止導致的。

建議你把數組的地址打出來看看,就清楚多了。


推薦閱讀:

TAG:C編程語言 | C | 字元串 |