看板 C_and_CPP 關於我們 聯絡資訊
想問一個很簡單的問題,希望有人能告訴我 #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
loveflames:"Hello"存在rdata,當然不能改 10/23 15:51
stupid0319:VirtualProtectEx(GetCurrentProcess(), 10/23 15:53
stupid0319:x,6, PAGE_EXECUTE_READWRITE, NULL); 10/23 15:53
stupid0319:改之前加上面這一行就可以了 10/23 15:54
vm6jp6rmp4:請恕小弟愚昧!請問什麼式rdate呢? 10/23 15:54
stupid0319:readonly data 10/23 15:55
stupid0319:Resource Data才對 10/23 15:58
loveflames:這個例子不是resource 10/23 15:59
vm6jp6rmp4:所以說*x是無法更改的嗎? 10/23 16:00
stupid0319:可以改,不過要改記憶體分頁屬性 10/23 16:01
loveflames:改屬性就失去設readonly的意義了吧 10/23 16:02
loveflames:不看置底文的好像很多 10/23 16:03
stupid0319:一般對於記憶體配置不熟的人,都會有這個問題吧 10/23 16:06
purpose:你就這樣記,每次定義變數時,如果變數名稱只有一個 10/23 16:23
purpose:那麼產生的變數就也只會有一個。應用到此例,你只產生了 10/23 16:23
purpose:一個變數,就是指標變數,裡面可以修改的是記憶體位址而已 10/23 16:24
purpose:而既然已經讓變數是指值標了,那個後面的字串就是不可變的 10/23 16:24
loveme00835:可是陣列是好多沒有名字的變數...囧 10/23 16:31
purpose:一即是全,全即是一 10/23 16:34
loveme00835:等價交換原則 - 寫 n 行程式, 要先看過 n 本書 (誤 10/23 16:39
nowar100:來,跟著我念: 發問前請看置底,發問前請看置底,發問前... 10/23 18:21
tropical72:發問前請看置底,發問前請看置底,發問前... 10/23 20:49