程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習005:不能修改的字符串,c語言學習005字符串

C語言學習005:不能修改的字符串,c語言學習005字符串

編輯:關於C語言

C語言學習005:不能修改的字符串,c語言學習005字符串


  一段有問題的代碼,你能看出來麼?

1 int main(){
2     char* msg="ABC";
3     msg[0]=msg[1];
4     puts(msg);
5     return 0;
6 }

  編譯這段代碼並不會有什麼問題,一段運行程序就崩潰;因為這段代碼修改了內存中常量區的值

  計算機將程序載入內存時,會把所有常數放到常量存儲區,這部分內存是只讀的

  為了更改字符串的內容,需要對它的副本進行操作,就是將字符串的內容復制到非只讀區域就可以了

  那麼這和之前的代碼區又什麼區別呢?在原來的代碼中使用了指向只讀區域的指針,我們通過指針去修改字符串的值,而指針所對應的字符串是在只讀區域中的;而在後面的代碼,我們是用字符串字面量初始化了一個數組,就是將只讀的字符串復制到了非只讀區域,這樣對於這個副本我們就可以隨意的去修改它了

  為了避免以後再犯修改只讀區域的錯誤,我們可以在聲明指針的時候加上const關鍵字,這樣在編譯的時候程序就能避免這種錯誤

  將指針賦值字符串字面量是沒有錯的,錯的是去修改了它的值

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved