字串常量和字元陣列的區分

2021-07-11 05:52:29 字數 821 閱讀 5209

首先我們來看個程式,這個程式說的是字串函式strcat()函式的實現:

#include

#include

#include

#define max 20

char *my_strcat(char *dest, const

char *src)

while (*dest = *src)

return dest;

}int main()

在這我們會有乙個疑問:

char arr1[max] = "abcd";

char *arr2 = "abcd";

這個兩個為什麼要這樣來進行初始化。

其實,第一行所初始化的是乙個字元陣列。

char arr1[max] = "abcd";
儘管他看上去像是乙個字串常量,但實際上並不是,他只是初始化列表的另外一種的寫法。他是根據他們所處的上下文環境進行區分,當用於初始化乙個字元陣列時,他就是乙個初始化列表,在其他地方,他都表示乙個字串常量

而第二句:

char *arr2 = "abcd";
這裡所初始化的就是乙個字串常量。

這兩個初始化看上去很像,但是他們具有不同的含義,前者初始化的是乙個字元陣列的元素,而後者則是乙個真正的字串常量。這個指標變數被初始化為指向這個字串常量的儲存位置。

字串常量和字元陣列

1.字串常量 char cstringa hello word 並不建議這樣寫 const char cstringb hello word 建議寫成這樣 cstringa a 執行時出錯,字串常量不允許修改 實際上,c語言中的標準,對於字串常量必須要賦值給const char 的變數,這樣就可以理...

字串常量和字元陣列

一.字串都是以 0 結尾 二.凡是雙引號中的內容,皆是字串。也就是,雙引號會在它內容後自動加乙個 0 且佔乙個位元組數。三.單引號中容納的是char型別的字元常量,且僅能容納乙個 四.字元陣列中不指定長度,系統會自動匹配適應的長度。五.如果對字元陣列沒有初始化完全,系統會在未賦值的地方新增 0 ch...

字串常量與字串陣列

1 對於 字串,必以 0 結尾,如果是雙引號會在它所包含內容後面自動加乙個 0 且會佔據位元組數。2 字元陣列中若不指定長度,系統會自動分配 char str1 abcde 1,字串常量 char str2 abcde 2,字元陣列,在分配位元組時會在最後加上 0 3 字串 常量的值 不能被修改 因...