用递归返回反序字符串问题

问题遇到的现象和发生背景

编写一个常规的函数和一个递归函数,两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值。
在main函数中输入一行字符串,分别调用两个函数,输出反序后的字符串。
上面是我的题目下面是我的代码

#include
#include<string.h>

char *fanStr1(char str[],int length);   //递归函数令字符串反向输出
main(){
    char str[100];
    int length=0;       // 记录字符串长度
    char *str1,*str2;   //str1是常规函数返回,str2是递归函数返回
    int i=0;
    printf("请输入字符串:");
    scanf("%s", str);
    for(;str[length]!='\0';length++);
    length--;
    str2=fanStr1(str,length);
    for(;i<=length;i++){
        printf("%c", *(str2+i));
    }
}

char *fanStr1(char *str,int length){
    char str4[1000];    
    char *str3;
    //int i=1;
    str4[0]=str[length];
    if(length>0){
    str3=fanStr1(str,length--);
    strcat(str4,str3);
    }
    return str4;
}

img


然后程序运行不了我调试就遇到这种情况。是怎么回事

逆序是对字符的操作,strcat是连接2个字符串。


char *fanStr2(char *str, char *str2)
{
    char t, *s = str;
    if (str >= str2)
        return NULL;

    t = *str;
    *str = *str2;
    *str2 = t;
    fanStr2(++str, --str2);
    return s;
}

调用
str2 = fanStr2(str, str + length);
puts(str2);