細節2 字元陣列和字串常量是一樣的嗎?

2021-09-08 13:54:43 字數 713 閱讀 2881

寫在前面

字串常量和字元陣列,平時極易遇到的問題。我在將字元型別的16進製制轉換為int型十進位制時,又遇到這個老朋友。且看一一分解。

char a = "abc";

char b = ;

這兩種方式都可以給字元陣列賦值。一種使用字串常量,一種用的單個字元賦值。但實際上,a偷偷帶了乙個小尾巴』\0』,這是因為字串常量總是以』\0』結尾的

所以a的實際長度是4,b的實際長度是3。sizeof函式

常用的方式好說,那常量在賦值到字元陣列時,是把常量區的內容複製到棧中的。根據c程式儲存空間布局可得,有正文段、data段(已賦值的資料)、bss段(未賦值的資料)、堆、棧。

「abc」屬於常量,是存放在data段的,而在main函式中宣告的a是存放在棧空間的,第一種賦值方式是將「abc」的內容複製到棧中a的位址空間的,所以連帶著』\0』一起複製。

這也是為什麼只能在宣告時使用這種方式賦值。如果是以下這種方式,則報錯。

字串常量和字元陣列

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

字串常量和字元陣列

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

2018 5 25字串常量與字串變數

本質上我是不想搞清楚這些奇奇怪怪的東西的,都是奇奇怪怪東西 0 0 下面是來自各個地方關於這個解釋,大家瞅著那個看上去比較合理就接受那乙個吧,突然感覺陣列和指標是不一樣的。char s1 helloworld char s2 helloworld 首先s1 0 t 這是不對的啦,s1裡的內容是不能修...