是野指針問題嗎?但指針不是指向字元串首地址了嗎?

還有個思路是這樣的

因為現代的操作系統保護的是虛擬內存,系統保護虛擬內存並不保護物理內存

去看看開源的 macOS 代碼中怎麼找到虛擬內存對應的物理內存,再找找修改物理內存的方法

這樣也可以大功告成的

事情就是這麼個事情,方法就是這麼個方法,至於做那就算了,都是掏糞的體力活,但有資料複製粘貼一下就幾分鐘的事

但這些就是經驗而不是傳統意義上我們所說的知識了

所以多多接受設定,不要強行出斧去想著跨級打怪越塔殺人,會變態的


  1. C語言中字元串的本質:實際上是以「 」結尾的字元數組;
  2. C語言中字元串儲存的位置:1.靜態儲存區,程序載入內存時確定,程序運行時不可更改;2.動態儲存區,程序運行時確定,程序運行時可更改;
  3. 形入"abcdefg"的字元串,稱為字元串字面量常量的一種,只要在源代碼中出現,編譯時會把他指定到靜態儲存區,程序運行時不可更改
  4. 實際上,在源程序中,字元串常量本身可表示自身起始字元的指針,即:

putchar(*"abcdef");
// 輸出結果:a

putchar(*("abcdef"+2));
// 輸出結果:c


這個問題在我的C語言解惑圈子的【第244篇】【你問我答】【能把一個字元串常量拷貝給另一個字元串常量嗎?】分析過,有興趣的小夥伴可以加我微信:c-poop 進圈子查看!

這段C程序中,兩個指針分別指向兩個字元串,這種寫法的意思就是說兩個字元串是常量字元串!

何謂常量字元串?就是不能修改的字元串!

strcpy(a, b)這句話的意思就是把指針a指向的那個字元串修改為「ewnvlvfm」字元串,所以當然是不可以修改的,所以運行結果就不是你想的那個意思了?

如果是這麼寫呢?

char a[]="efvswvfm";

char b[]="ewnvl";

這就可以strcpy了!


推薦閱讀:
相关文章