[問題] 指標字串

看板C_and_CPP (C/C++)作者 (坐領肝薪)時間14年前 (2011/08/21 23:28), 編輯推噓3(3017)
留言20則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 請問如果用指標字串宣告一段字串,那後來可以更改其資料嗎?還是只是為唯讀的? 因為照書上寫入後,無法通過會直接顯示出錯...是小弟哪裡觀念出錯呢...書上筆記 寫的是說沒取得記憶體位置,但不是一開始宣告*s就取得記憶體的位置了嗎?? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> int main() { int i; char *s ="abc"; s[2]='d'; while(s[i]!='\0') { printf("%c",s[i]); i++; } return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.161.94.249

08/21 23:29, , 1F
置底文十三戒第四看一下
08/21 23:29, 1F

08/21 23:30, , 2F
你確定書上是這樣教你的嗎
08/21 23:30, 2F

08/21 23:37, , 3F
4. 不要試圖用 char* 去更改一個"字串常數"
08/21 23:37, 3F

08/21 23:38, , 4F
所以我也在這裡困擾很久,書上說可以通過編譯
08/21 23:38, 4F

08/21 23:38, , 5F
但我自己實際執行事實上雖可以,卻馬上就出現錯誤
08/21 23:38, 5F

08/21 23:38, , 6F
所以就不知道哪裡出問題@@
08/21 23:38, 6F

08/21 23:39, , 7F
char *s = "abc"; 這樣 "abc" 所存的那個地方是'唯讀'的
08/21 23:39, 7F

08/21 23:40, , 8F
通過編譯跟可以執行是兩回事喔,編譯器抓不出這種東西
08/21 23:40, 8F

08/21 23:43, , 9F
恩 果然跟我想法一致,那個abc不能更改,感謝詹姆士大大!
08/21 23:43, 9F

08/21 23:57, , 10F
字串常數是個常數呀,常數是唯讀,不能更改
08/21 23:57, 10F

08/22 00:05, , 11F
可是書上說這個*s="abc";是指標變數..所以我一直搞不懂
08/22 00:05, 11F

08/22 00:05, , 12F
這環節,是課本表示錯,還是我想法錯了?
08/22 00:05, 12F

08/22 00:06, , 13F
s是一個指標變數,指向某個空間,但那個空間不能修改
08/22 00:06, 13F

08/22 00:06, , 14F
所以我歸納 *s是指標變數,但他指過去的內容是常數
08/22 00:06, 14F

08/22 00:07, , 15F
這個想法對嗎?y
08/22 00:07, 15F

08/22 00:07, , 16F
就是這個意思
08/22 00:07, 16F

08/22 00:07, , 17F
這樣就是綜合j大跟k大我所歸納的結果
08/22 00:07, 17F

08/22 00:08, , 18F
恩恩 感謝j大k大 終於有茅塞頓開的感覺了!
08/22 00:08, 18F

08/22 04:43, , 19F
有一些東西是歷史的痕跡,可以的話請寫 const char* :)
08/22 04:43, 19F

08/22 05:02, , 20F
據說是因為很多舊的程式碼都這樣寫所以編譯器不太能抓...
08/22 05:02, 20F
文章代碼(AID): #1EKIGmZ0 (C_and_CPP)
文章代碼(AID): #1EKIGmZ0 (C_and_CPP)