[問題] 字串反轉

看板C_and_CPP作者 ( )時間7年前 (2016/12/28 21:13), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串2/2 (看更多)
以下我自己寫了一個字串反轉的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

12/28 21:16, , 1F
*a="1235" 是會只到一個read only的區段。
12/28 21:16, 1F

12/28 21:17, , 2F
而a[]="123456" 算是 copy assignment ,所以可以更改
12/28 21:17, 2F

12/28 21:25, , 3F
置底十三誡之第四誡
12/28 21:25, 3F

12/28 21:31, , 4F
宣告char* a的話,修改前呼叫VirtualProtect
12/28 21:31, 4F

12/28 22:40, , 5F
這不是一個好的workaround
12/28 22:40, 5F

12/28 23:12, , 6F
string的解法方便很多 不用string嗎
12/28 23:12, 6F

12/28 23:26, , 7F
這是日據時代很多公司的熱門面試題
12/28 23:26, 7F
文章代碼(AID): #1OOxfvvY (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1OOxfvvY (C_and_CPP)