看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
james732:置底文十三戒第四看一下 08/21 23:29
stonehomelaa:你確定書上是這樣教你的嗎 08/21 23:30
atx236529:4. 不要試圖用 char* 去更改一個"字串常數" 08/21 23:37
atx236529:所以我也在這裡困擾很久,書上說可以通過編譯 08/21 23:38
atx236529:但我自己實際執行事實上雖可以,卻馬上就出現錯誤 08/21 23:38
atx236529:所以就不知道哪裡出問題@@ 08/21 23:38
james732:char *s = "abc"; 這樣 "abc" 所存的那個地方是'唯讀'的 08/21 23:39
james732:通過編譯跟可以執行是兩回事喔,編譯器抓不出這種東西 08/21 23:40
atx236529:恩 果然跟我想法一致,那個abc不能更改,感謝詹姆士大大! 08/21 23:43
kswiss11:字串常數是個常數呀,常數是唯讀,不能更改 08/21 23:57
atx236529:可是書上說這個*s="abc";是指標變數..所以我一直搞不懂 08/22 00:05
atx236529:這環節,是課本表示錯,還是我想法錯了? 08/22 00:05
james732:s是一個指標變數,指向某個空間,但那個空間不能修改 08/22 00:06
atx236529:所以我歸納 *s是指標變數,但他指過去的內容是常數 08/22 00:06
atx236529:這個想法對嗎?y 08/22 00:07
james732:就是這個意思 08/22 00:07
atx236529:這樣就是綜合j大跟k大我所歸納的結果 08/22 00:07
atx236529:恩恩 感謝j大k大 終於有茅塞頓開的感覺了! 08/22 00:08
Favonia:有一些東西是歷史的痕跡,可以的話請寫 const char* :) 08/22 04:43
Favonia:據說是因為很多舊的程式碼都這樣寫所以編譯器不太能抓... 08/22 05:02