看板 C_and_CPP 關於我們 聯絡資訊
以下我自己寫了一個字串反轉的code void reverse(char *a) { int size = strlen(a); char temp; for(int i=0; i<size/2 ; i++) { temp = *(a+i); *(a+i) = *(a+size-1-i); *(a+size-1-i) = temp; } } 但在輸入時 如果我宣告 char a[] = "12345" ; 舊可以成功執行 如果我宣告 char *a = "12345" 進入該段code就會fail 請問兩者差異我要如何解釋? 是因為經由 *a 的方式宣告 a會是const type 無法被修改嘛? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.146.206 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1482930809.A.E62.html
purpon: *a="1235" 是會只到一個read only的區段。 12/28 21:16
purpon: 而a[]="123456" 算是 copy assignment ,所以可以更改 12/28 21:17
Schottky: 置底十三誡之第四誡 12/28 21:25
stupid0319: 宣告char* a的話,修改前呼叫VirtualProtect 12/28 21:31
TobyH4cker: 這不是一個好的workaround 12/28 22:40
ko27tye: string的解法方便很多 不用string嗎 12/28 23:12
Schottky: 這是日據時代很多公司的熱門面試題 12/28 23:26