[問題] 關於字串指標的更改

看板C_and_CPP (C/C++)作者 (Jun)時間15年前 (2010/10/23 15:50), 編輯推噓6(6016)
留言22則, 7人參與, 最新討論串1/2 (看更多)
想問一個很簡單的問題,希望有人能告訴我 #include <stdio.h> #include <stdlib.h> int main(void) { char *x="Hello"; *(x+1)='H'; printf("x=%s",x) system("pause"); } 我希望印出來的是HHllo 但是為什麼電腦可以Complier但是卻會出現錯誤訊息呢? 是說指標字串的內容不能改嗎?希望有高手可以詳解囉! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.198.112

10/23 15:51, , 1F
"Hello"存在rdata,當然不能改
10/23 15:51, 1F

10/23 15:53, , 2F
VirtualProtectEx(GetCurrentProcess(),
10/23 15:53, 2F

10/23 15:53, , 3F
x,6, PAGE_EXECUTE_READWRITE, NULL);
10/23 15:53, 3F

10/23 15:54, , 4F
改之前加上面這一行就可以了
10/23 15:54, 4F

10/23 15:54, , 5F
請恕小弟愚昧!請問什麼式rdate呢?
10/23 15:54, 5F

10/23 15:55, , 6F
readonly data
10/23 15:55, 6F

10/23 15:58, , 7F
Resource Data才對
10/23 15:58, 7F

10/23 15:59, , 8F
這個例子不是resource
10/23 15:59, 8F

10/23 16:00, , 9F
所以說*x是無法更改的嗎?
10/23 16:00, 9F

10/23 16:01, , 10F
可以改,不過要改記憶體分頁屬性
10/23 16:01, 10F

10/23 16:02, , 11F
改屬性就失去設readonly的意義了吧
10/23 16:02, 11F

10/23 16:03, , 12F
不看置底文的好像很多
10/23 16:03, 12F

10/23 16:06, , 13F
一般對於記憶體配置不熟的人,都會有這個問題吧
10/23 16:06, 13F

10/23 16:23, , 14F
你就這樣記,每次定義變數時,如果變數名稱只有一個
10/23 16:23, 14F

10/23 16:23, , 15F
那麼產生的變數就也只會有一個。應用到此例,你只產生了
10/23 16:23, 15F

10/23 16:24, , 16F
一個變數,就是指標變數,裡面可以修改的是記憶體位址而已
10/23 16:24, 16F

10/23 16:24, , 17F
而既然已經讓變數是指值標了,那個後面的字串就是不可變的
10/23 16:24, 17F

10/23 16:31, , 18F
可是陣列是好多沒有名字的變數...囧
10/23 16:31, 18F

10/23 16:34, , 19F
一即是全,全即是一
10/23 16:34, 19F

10/23 16:39, , 20F
等價交換原則 - 寫 n 行程式, 要先看過 n 本書 (誤
10/23 16:39, 20F

10/23 18:21, , 21F
來,跟著我念: 發問前請看置底,發問前請看置底,發問前...
10/23 18:21, 21F

10/23 20:49, , 22F
發問前請看置底,發問前請看置底,發問前...
10/23 20:49, 22F
文章代碼(AID): #1CmfEtpU (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CmfEtpU (C_and_CPP)