[問題] array pointer的問題

作者: sighAll (sigh)   2018-07-29 17:54:53
大家好 朋友問了一個題目 說哪裡有錯
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;
}
作者: leo850319 (不要說話)   2018-07-29 18:03:00
因為你的p一直++
作者: james732 (好人超)   2018-07-29 18:21:00
strlen應該不包含\0的長度吧?
作者: cutekid (可愛小孩子)   2018-07-29 18:30:00
malloc 少 1 byte
作者: sighAll (sigh)   2018-07-29 18:44:00
malloc加一個byte也是一樣結果
作者: jerryh001   2018-07-29 19:02:00
1樓的對
作者: cutekid (可愛小孩子)   2018-07-29 20:05:00
p 的位置已經不在字串開頭,跑到結尾了
作者: Gway (我愛的你 也愛我 好嗎?)   2018-07-29 21:42:00
malloc改成(strlen(s)+1) while loop 改成 while (*s !=‘\0’) 配合原先temp寫法較佳你的temp跟p 建議交換使用 語意上比較清楚 temp 用來操作指標 p是new alloc要傳回的指標
作者: sighAll (sigh)   2018-07-29 21:47:00
謝謝大家 頓時豁然開朗!
作者: BelieveRich (Rich)   2018-07-30 01:51:00
所以最後是什麼問題?
作者: steve1012 (steve)   2018-07-30 03:13:00
他的p已經移動了 並不是指到字串的頭

Links booklink

Contact Us: admin [ a t ] ucptt.com