1.誤區:字元陣列就是字串
來自:
字元陣列,完整地說叫字元型別的陣列。字元陣列不一定是字串。
字串是最後乙個字元為null字元的字元陣列。字串一定是字元陣列。
字元陣列的長度是固定的,其中的任何乙個字元都可以為null字元。
字串只能以null結尾,其後的字元便不屬於該字串。
strlen()等字串函式對字串完全適用,對不是字串的字元陣列不適用。
#include #include int main(void)
; //這是字串賦初值的方法
char sarr = "quanxue";
//用sizeof()求長度
printf("carr的長度=%d\n", sizeof(carr)); //長度為7
printf("sarr的長度=%d\n", sizeof(sarr)); //長度為8,最後一位是null
//用printf的%s列印內容
printf("carr的內容=%s\n", carr); //不能正確顯示
printf("sarr的內容=%s\n", sarr); //可以正確顯示
//用strlen()求長度
printf("carr的長度=%d\n", strlen(carr)); //不正確的結果
printf("sarr的長度=%d\n", strlen(sarr)); //null不在計算範圍
return 0;
}
2.字元陣列與字元指標
首先在記憶體的中位置不同,字元陣列儲存的字串存放在記憶體的棧中,而字元指標指向的字串儲存在記憶體的靜態儲存區中。
其次字元陣列儲存的字串屬於字串變數,可以被修改,而字元指標指向的字串是屬於字串常量,不能被修改。
#include int main()
; char* ptr = "hello world";
str[0] = 'f';
ptr[0] = 'f'; //將字元指標指向的字串修改,將出現段錯誤,因為該記憶體位址唯讀(常量區),因為該字串屬於常量
return 0;
}
3.關於其它自己驗證的**:
#include void main()
{ char a = "hello";
char b[5] = "hello";
char *c = "hello";
printf("sizeof:%d,strlen:%d,%s\n", sizeof(a),strlen(a), a);
printf("sizeof:%d,strlen:%d,%s\n",sizeof(b),strlen(b), b);
printf("%c", a[5]);
printf("sizeof:%d,strlen:%d",sizeof(c),strlen(c));
int i;
for(i=0;i
解釋:關於sizeof(c),算的是指標大小。其實c和a的儲存空間一樣大。都是6。
字元陣列與字串
字元陣列與字串 字串就是字元的序列,可看作單個資料項。定義在雙引號之間的字元組 雙引號除外 就是乙個字串常量。例 man is abviously made to think 字串變數的宣告與初始化 c語言並不支援字串資料型別。但是,它允許作為字元陣列來表示字串。因此在c語言中,字串變數就是任何合法...
字元陣列與字串
字元陣列與字串 6.3.1 字元陣列的逐個字元操作 案例6.5 從鍵盤輸入乙個字串,回車鍵結束,並將字串在螢幕上輸出。main i 0 while str x0d printf c str i printf n getch 1 字元陣列的定義 1維字元陣列,用於儲存和處理1個字串,其定義格式與1維數...
字元陣列與字串
char str 6 char str2 6 world printf s n str scanf s str2 for i 0 str i 0 i 說明 系統為了明確區分記憶體上的字串從屬關係,它會去尋找空字元,ascii嗎為0 我們稱為結束符,從陣列名指標位一直往後找,知道找到空字元為止。既然字...