[問題] 字串與指標的問題

看板C_and_CPP (C/C++)作者 (本帳號已停止使用)時間16年前 (2009/04/21 19:30), 編輯推噓4(4010)
留言14則, 4人參與, 最新討論串1/1
請問一下,下面這個方法為什會執行時會出現錯誤呢? void main() { char *a="i am a boy"; a[2]='A'; cout << a << "!!!\n"; } 若是將 char *a 改為 char a[20] 就可以了,不知道為什麼..@@ ps.(1)我用的是VC6 (2)編譯可以過,不過執行時會出現錯誤 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.117.77 ※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:30) ※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:31) ※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:33)

04/21 19:42, , 1F
char *a="i am a boy"; 代表ptr a指到一個const char
04/21 19:42, 1F

04/21 19:43, , 2F
array裡面的內容是"i am a boy"; 因為是const, 所以你
04/21 19:43, 2F

04/21 19:43, , 3F
a[2] = 'A'; 嘗試去改一個const自然就錯了....
04/21 19:43, 3F

04/21 19:44, , 4F
改char a[20]可以是因為它是一個陣列a有20個char的空間
04/21 19:44, 4F

04/21 19:44, , 5F
裡面給initial值為"i am a boy", 所以寫a[2]是合法的:)
04/21 19:44, 5F

04/21 19:45, , 6F
編譯可以過代表語法是正確的, 但是執行時才發現你語意不
04/21 19:45, 6F

04/21 19:46, , 7F
對; 比如你可以char b[20]={...}; char *a=b; a[2]='A';
04/21 19:46, 7F

04/21 19:50, , 8F
所以原來那樣的code, compiler是不負責幫你抓error的.
04/21 19:50, 8F

04/21 19:51, , 9F
置底十之四
04/21 19:51, 9F

04/21 19:52, , 10F
嗚嗚~~我推那裡辛苦, 又想不出來看過哪裡有解釋了Q_Q~
04/21 19:52, 10F

04/21 19:55, , 11F
存取 read-only text section 的常見問題
04/21 19:55, 11F

04/21 19:55, , 12F
原來這樣的宣告方式算是常數,謝謝~(置底那個我看不太懂..)
04/21 19:55, 12F

04/21 19:55, , 13F
你如果是用 char [] 的話 他會做一次拷貝
04/21 19:55, 13F

04/21 19:56, , 14F
有興趣 objdump 或者 gcc -S 看一下 asm 就瞭改哩
04/21 19:56, 14F
文章代碼(AID): #19xQv1PP (C_and_CPP)
文章代碼(AID): #19xQv1PP (C_and_CPP)