[問題] array pointer的問題

看板C_and_CPP (C/C++)作者 (sigh)時間7年前 (2018/07/29 17:54), 編輯推噓6(607)
留言13則, 8人參與, 7年前最新討論串1/1
大家好 朋友問了一個題目 說哪裡有錯 char * saveString(const char * s) { // allocate memory for a copy of the input string s char *p = (char*) malloc(strlen(s)); while (*s) { *p++ = *s++; } *p = '\0'; // null-terminate saved copy return p; } 小弟研究半天 後來終於找到解答 多一個char *temp 去讓p指過去 最後return temp, 但我不曉得為什麼原本的寫法有問題 以下是可以compiler和回傳回來是正確的code 請大大開示 謝謝!! char * saveString(char * s) { // allocate memory for a copy of the input string s char *p = (char*) malloc(strlen(s)); char *temp; temp = p; while (*s) { printf("*s=%c\n", *s); *p++ = *s++; } *p = '\0'; // null-terminate saved copy return temp; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.253.187 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532858095.A.F7D.html

07/29 18:03, 7年前 , 1F
因為你的p一直++
07/29 18:03, 1F

07/29 18:21, 7年前 , 2F
strlen應該不包含\0的長度吧?
07/29 18:21, 2F

07/29 18:30, 7年前 , 3F
malloc 少 1 byte
07/29 18:30, 3F

07/29 18:44, 7年前 , 4F
malloc加一個byte也是一樣結果
07/29 18:44, 4F

07/29 19:02, 7年前 , 5F
1樓的對
07/29 19:02, 5F

07/29 20:05, 7年前 , 6F
p 的位置已經不在字串開頭,跑到結尾了
07/29 20:05, 6F

07/29 21:42, 7年前 , 7F
malloc改成(strlen(s)+1) while loop 改成 while (*s !=
07/29 21:42, 7F

07/29 21:42, 7年前 , 8F
‘\0’) 配合原先temp寫法較佳
07/29 21:42, 8F

07/29 21:44, 7年前 , 9F
你的temp跟p 建議交換使用 語意上比較清楚 temp 用來操作指
07/29 21:44, 9F

07/29 21:44, 7年前 , 10F
標 p是new alloc要傳回的指標
07/29 21:44, 10F

07/29 21:47, 7年前 , 11F
謝謝大家 頓時豁然開朗!
07/29 21:47, 11F

07/30 01:51, 7年前 , 12F
所以最後是什麼問題?
07/30 01:51, 12F

07/30 03:13, 7年前 , 13F
他的p已經移動了 並不是指到字串的頭
07/30 03:13, 13F
文章代碼(AID): #1RNOxlzz (C_and_CPP)
文章代碼(AID): #1RNOxlzz (C_and_CPP)