为什么要加这句才能显示454545412312312312313225,否则无显示,该如何解决

为什么要加这句才能显示454545412312312312313225,否则无显示
C/C++ code
int main(int argc, char *argv[])
{
    char *p;
    
    p = Strcat("454545","412312312312313225");
    printf("%s",p);

    return 0;
}


char *Strcat(char *str1, char *str2)
{
    char *p,len1,len2;
    unsigned char i;
    
    
    len1 = strlen(str1);
    len2 = strlen(str2);
    
    //printf("%d %d\n",len1,len2);        //为什么要加这句才能显示454545412312312312313225,否则无显示
    
    p = (char *)(malloc(len1+len2)+1);
    
    while(*str1 != '\0')
    {   
    
        p[i++] = *str1++;
    }
    while(*str2 != '\0')
    {
        p[i++] = *str2++;
    }
    
    p[i] = '\0';
    
    return p;
    
}


------解决方案--------------------
你这代码都编译不通过啊
p = (char *)(malloc(len1+len2)+1);

改成
p = (char *)(malloc(len1+len2+1));
------解决方案--------------------
而且你i还没初始化
unsigned char i=0;
------解决方案--------------------
p = (char *)(malloc(len1+len2)+1);//这句有点疏忽
 应该是这样:
 p = (char *)(malloc(len1+len2+1));

为什么len1,len2,i这些要声明为char类型?求指教
俺一般会声明为int型

楼主说的问题应该与len1、len2是char类型有关
------解决方案--------------------
我想知道为什么不释放内存???
------解决方案--------------------
探讨
C/C++ code

int main(int argc, char *argv[])
{
char *p;

p = Strcat("454545","412312312312313225");
printf("%s",p);
free(p); //放这这儿 ?

retur……

------解决方案--------------------
C/C++ code

int main(int argc, char *argv[])
{
    char *p;
    
    p = Strcat("454545","412312312312313225");
    printf("%s",p);
    free(p);
    return 0;
}


char *Strcat(char *str1, char *str2)
{
    char *p;
    size_t len1,len2;
    int i=0;
    
    
    len1 = strlen(str1);
    len2 = strlen(str2);
    
    //printf("%d %d\n",len1,len2);        //为什么要加这句才能显示454545412312312312313225,否则无显示
    
    p = (char *)malloc(len1+len2+1);
    
    while(*str1 != '\0')
    {   
    
        p[i++] = *str1++;
    }
    while(*str2 != '\0')
    {
        p[i++] = *str2++;
    }
    
    p[i] = '\0';
    
    return p;
    
}