如何用C语言编写join()函数?

#include 
void join(char *str1,char *str2)
{
    char *p1,*p2,*p3;
    int len1,m=0;
    len1=0;
    p1=str1;
    p3=str1;
    while(*p1!='\0')
    {
        len1++;
        p1++;
    }
    p2=str2;
    while(p1>=p3)
    {
        m++;
        *(p1+len1-m)=*p1;
        p1--;
    }
    while(*p1!='\0')
    {
        p1++;
        *p1=*p2;
        p1++;
    }
}
int main(){
char s1[100]="ABCD";
char s2[100]="*";
join(s1,s2);
printf("%s\n",s1);
    return 0;
}
运行结果BCD
我想要达到的结果ABC*D

请问上述程序中哪里错误导致结果错误?

1.把m++;放到p1--后面
2.在执行最后一个while之前要先执行p1++,否则位置不对

我认为应该先把str1向右移,str1每个字符间留够str2字符串的位置,然后再插入str2