0

关于如何编写获取 2 个参数的 RECURSIVE 函数的任何想法:首先是地址 d(char 的位置)。第二个是字符串。该函数将字符串 s 复制到从 d 开始的位置。该函数返回 d 作为结果!我们可以在没有 strcpy 的情况下做到吗?

    copy_r(char *s, char *d)
{
    *d = *s;
    if(*s)return copy_r(++s, ++d);
}

错误在哪里?(发现)放还是有问题!如果位置 d 与某个已被 s 占用的位置重叠怎么办?
例如 strcpy(p1, "abcdefghijklomopqrstuvwqyz"); printf(copy_r(p1, p1+10));不起作用——

输出应该是 klomopqrstuvwqyz

4

2 回答 2

1

你的复制逻辑是完美的。只是你没有返回任何值(d)......

这应该有效:

char* copy_r(char *s, char *d)
{
    *d = *s;
    if(*s)
      return copy_r(s + 1, d + 1 ) - 1 ; //-1 is to take care of d+1 part
    else
      return d;
}

示例用法:

int main(){
    char src[]="hello world";
    char dest[50];

    char* t=copy_r(src,dest);

    printf("%s\n%s\n",t,dest); //t==dest. thus you don't really have to return anything from the function.
    return 0;
}
于 2013-02-05T14:31:36.183 回答
1

where is the mistake

好吧,没有任何错误,此代码示例可以正常工作......我看到的唯一问题是它不能完全按照您的预期工作。你提到你想要它,但The function returns d as a result你没有这样做。

该代码当前将s内容复制到其中d,如果您有类似的内容:

char * str = "hello";
char * ptr = malloc(6);
copy_r(str, ptr);
// now ptr has "hello" too
于 2013-02-05T14:14:49.293 回答