定義指標時,編譯器並不為指標所指向的物件分配空間,它只是分配指標本身的空間,除非在定義時同時賦給指標乙個字串常量進行初始化。
在ansi c中,初始化指標時所建立的字串常量被定義為唯讀。如果試圖通過指標修改字串的值,程式就會出現未定義的行為。在有些編譯器中,字串常量被存放在只允許讀取的文字段中,以防止它修改。
————以上摘自《c專家程式設計》p87
與指標相反,由字串常量初始化的陣列是可以修改的。
請看下面的例子:
這裡是用字串常量來初始化指標的。
以上錯誤的產生就是因為我們對被定義為唯讀的字串常量進行了修改,因為呼叫了strcpy就會對我們定義的字串進行修改。
結合《c專家程式設計》p87所講述的,很容易發現問題所在,我們只需將main函式中的「char *str="abcdefg";」更改為「char str="abcdefg";」即可。
注:unhandled exception in :access violation
字串 用陣列初始化和用指標初始化方法
1 字串陣列初始化 1 用足夠的空間的陣列儲存字母串 const char example 40 so big it is.const表示不會更改這個字母串 還有這種 const char example 40 注意最後的空字元 0 沒有這個空字元,這就不是乙個字串,而是乙個字元陣列。2 讓編譯器確...
字串 用陣列初始化和用指標初始化方法區別
const char ptr1 fine.const char ar fine.以上的宣告中,ptr1和ar都是該字串的位址,但這兩種形式並不完全相同。初始化陣列 字串儲存在靜態儲存區。但是,程式在開始執行時才會為該陣列分配內 存 以上面的宣告為例,陣列形式ar 在計算機的記憶體中分配為乙個內含6 ...
字串陣列初始化
1 char arr 10 hi 初始化字串陣列時,編譯器自動將字串最後乙個字元後面加上 0 以表示字串的結束。如果陣列的大小大於字串的長度 1,那麼把字串結束後面的元素也都初始化為 0 看這段程式 定義乙個大小為12的字串陣列 char str1 12 jiajia 讓乙個char型的指標指向這個...