Re: [問題] char* char[]

看板C_and_CPP (C/C++)作者 (ㄟ)時間16年前 (2009/12/26 00:57), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
※ 引述《eyhuang (HYY)》之銘言: : ※ 引述《LPH66 (IWH68S0XZ8M89)》之銘言: : : 以上你所說的只有第一行不太對 : : 現在就我所知的compiler實作都是把常數字串集合在一起 然後那區設唯讀 : : 所以"123"就代表那一區中"123"這個常數字串的位置 : : 因此char *test="123"就是把test指過去 : : 而"456"和"123"是同一區的不同的地方 所以再用test="456"就是再指到那個地方去這樣 : : (不然想想看 char *foo="bar"; foo="QWERTYUIOPASDFGHJKLZXCVBNM"; 這個情形 : : 兩次中foo還是指向同一個地方嗎?) : : 然後我所謂的"改那邊就不對了"指的是原文有提到的segment fault : : 因為那個字串是在唯讀區所以去改它就會有segment fault這樣 : : 後面三行很正確 如果你確定某個char *只會接常數字串 : : 那就乾脆把它宣告成const char *來防呆 : : (我一直覺得const是拿來防呆用的...XD) : 哦~原來是這樣 char *test="123"; test="456"; : 那字串是常數是說不能改123的內容 可是我把test指到456去 : 或是test++;是可以的嗎? 那test指到的"123"這塊記憶體的life time是多久? 是看compiler怎麼implement嗎? 第三行.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.231.243

12/26 01:23, , 1F
印象中是 global ...
12/26 01:23, 1F

12/26 02:38, , 2F
"123" 放在常數池,跟 program 一起 load 到 process 的,
12/26 02:38, 2F

12/26 02:39, , 3F
lifetime 當然跟 process 的壽命等同。
12/26 02:39, 3F
文章代碼(AID): #1BDEx_Ea (C_and_CPP)
文章代碼(AID): #1BDEx_Ea (C_and_CPP)