这是一个家庭作业,但我被一个错误的输出卡住了。分配的任务是重复单词“s”,使用递归的次数是“n”。我不知道我是否遗漏了一些显而易见的东西,或者我走错了方向。这是我到目前为止的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* repeat(char* s,int n){
    int len = strlen(s);
    char* temp = (char*)malloc(n*len*sizeof(char));
    if(n == 1){
        strcpy(temp,s);
        return (temp);
    }
    else{
        //temp = (char*)realloc(temp, n*len*sizeof(char));
        return (strcat(temp, repeat(s, n-1)));
    }
}

int main(void) {
    char* s = repeat("string", 3);
    printf("Result: "); fflush(stdout);
    puts(s);
    return (EXIT_SUCCESS);
}

我得到的结果是:结果:Ø
QèQ字符串
而它应该是stringstring
任何帮助都非常感谢。

最佳答案

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *repeat(char *s, int n){
    int len = strlen(s);
    char *temp;
    if(n == 1){
        temp = malloc(len + 1);
        memcpy(temp, s, len + 1);
        return temp;
    }
    temp = repeat(s, n-1);
    temp = realloc(temp, n * len + 1);
    memcpy(temp + (n-1)*len, temp, len + 1);
    return temp;
}

int main(void) {
    char* s = repeat("string", 3);
    printf("Result: "); fflush(stdout);
    puts(s);
    free(s);
    return (EXIT_SUCCESS);
}

//Simplification
char *repeat(char *s, int n){
    if(n == 0){
        return NULL;
    }
    int len = strlen(s);
    char *temp = realloc(repeat(s, n-1), n * len + 1);
    memcpy(temp + (n-1)*len, s, len + 1);
    return temp;
}

10-08 06:51