0

2つのパラメーターを取得するRECURSIVE関数の記述方法に関するアイデア:最初はアドレスd(charの場所)です。2番目は文字列です。この関数は、文字列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 に答える