一段有問題的**,你能看出來麼?
1intmain()
編譯這段**並不會有什麼問題,一段執行程式就崩潰;因為這段**修改了記憶體中常量區的值
計算機將程式載入記憶體時,會把所有常數放到常量儲存區,這部分記憶體是唯讀的為了更改字串的內容,需要對它的副本進行操作,就是將字串的內容複製到非唯讀區域就可以了
那麼這和之前的**區又什麼區別呢?在原來的**中使用了指向唯讀區域的指標,我們通過指標去修改字串的值,而指標所對應的字串是在唯讀區域中的;而在後面的**,我們是用字串字面量初始化了乙個陣列,就是將唯讀的字串複製到了非唯讀區域,這樣對於這個副本我們就可以隨意的去修改它了
為了避免以後再犯修改唯讀區域的錯誤,我們可以在宣告指標的時候加上const關鍵字,這樣在編譯的時候程式就能避免這種錯誤
將指標賦值字串字面量是沒有錯的,錯的是去修改了它的值
C語言學習 許可權的修改
在 linux 作業系統中檔案的許可權可以通過 rwx 的方式來表示,r 表示可讀,w 表示可寫,x 表示可執行。在作業系統實現這個功能時,採用的方式是按位儲存的。當我們不給任何許可權時,儲存表現為三個二進位制位 0,如果可讀則第一位會變成 1 如果可寫則第二位會變成 1 如果可執行則第三位會變成 ...
C語言學習筆記 轉義字元
所有的ascii碼都可以使用轉義字元來表示,其中包括了常用的列印字元和一些具有特殊功能的非列印字元。在c語言中,列印字元,如字母 數字 空格等字元,可以直接使用引號包含這些字元即可構成字元或字串資料。對於非列印字元,在引號中則必須使用轉移字元來進行表示。首先轉義字元和普通字元資料一樣,只能夠出現在單...
C語言學習
c語言學習 2013 3 26 1 編寫strcat s,t 函式,功能 將t指向的字串複製到s指向的字串的尾部。程式設計思路 1 通過while迴圈找到字串s的結束符。2 從找到的結束符開始將t複製到s,同時移動二者的指標。2 編寫函式strend s,t 如果字串t出現在字串s的尾部,該函式返回...