關於陣列中 字串常量 及 字元陣列 的問題

2021-08-18 18:49:47 字數 1583 閱讀 5403

首先給出以下程式:

(大家認為能不能成功執行呢?)

#includeint main()

執行結果截圖:

為什麼會使程式崩潰呢???

原因是str1是乙個字串常量

,分配的是乙個常量位址,也就是說存入str1中的是乙個位址,乙個常量記憶體,無法修改!!

str2則可以執行,使用輸出語句,執行的結果如下:

str2是乙個字元陣列,「abcde」是存放於陣列中的,str2[0]='x'意思就是把第乙個元素替換為x,可見字元陣列可以修改。

總結一下!!!

字串常量不可修改的~

字元陣列不越界的情況下可以修改

(以下則展示的是越界情況,會崩潰》

為了深化理解,再給出以下例子:

//關於陣列中字串常量以及字元陣列的問題

#include#includeint main()

上述 程式呼叫了庫函式strcpy(),也就是複製,但是兩次均失敗,原因如下:

①str1是乙個字串常量,無法修改值,因此無法進行複製,程式崩潰

②str2所佔的位元組數為6個位元組(如下圖),「hello world」越界,程式崩潰

總結!!!

在使用字串常量以及字元陣列的時候程式崩潰的原因:

①試圖修改字串的值

②越界關於

安全使用的問題

例如以下程式

#include#includeint main()

; gets(str1);//gets危險

printf("%s",str1);

}

①未越界,程式執行成功

②越界,程式崩潰

gets()是乙個非常危險的函式,曾經因為gets()函式導致過極其嚴重的問題。

因為gets容易越界,所以建議使用較安全的fgets()

字元陣列 字串及常量字串具體解釋

c語言中 void main 執行結果 p1和p2所指向的常量字串內容同樣並且位址也同樣。個人理解由於常量字串位於靜態區,p1指向的 abcd 已經分配了空間,p2所指向的常量字串與p1指向的常量字串同樣。所以不須要另外開闢空間。有些文章說,這取決於編譯器。常量字串內容不可更改。但能夠通過下標和移動...

字串常量和字元陣列

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

字串常量和字元陣列

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