为什么输出不了结果呢?求改一下!

P3. 编写函数void insert(char s1[],char s2[],char ch),功能为:在字符串s1中的指定字符ch后处插入字符串s2,如该字符串中无此字符,则不进行任何操作;若有多个相同字符,则在第一次出现的字符后插入。在主函数中输入字符串s1、s2和字符ch,并输出结果字符串s1。
如输入:AAB12345BCD
cdef
B
输出为:AABcdef12345BCD


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


void insert(char a[],char b[],char ch);

int main()
{
    char a[]="AAB12345BCD",b[]="cdef";
    char ch;
/*gets(s1);
  gets(s2);*/
    puts(a);
    puts(b);
    scanf("%c",ch);

    insert(a,b,ch);
    puts(a);
    return 0;
} 

void insert(char a[],char b[],char ch)
{
    char *p=a,*q;
    
    while(*p!=ch)
    {//确定字符ch的位置
        p++;
    }
    while(*b!='\0')
    {
        q=p;
        while(*q!='\0')
        { //确定a[]的最后的位置 
            q++;
        }
        while(q>=p)
        {//a[]向后移一个位置 
            *(q+1)=*(q--);
        }
        *(++q)=*(b++);//将b[]的一个字符赋给a[] 
        p++;
    }    
}

获取字符ch时没用&,然后插入函数有点逻辑错误,因为复制操作部分我看了一会没看明白,所以我用另外的方式实现了复制操作,如下:

 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
 
void insert(char a[],char b[],char ch);
 
int main()
{
    char a[]="AAB12345BCD",b[]="cdef";
    char ch;
/*gets(s1);
  gets(s2);*/
    puts(a);
    puts(b);
    scanf("%c",&ch);
 
    insert(a,b,ch);
    puts(a);
    return 0;
} 
 
void insert(char a[],char b[],char ch)
{
    char *p=a,*q;
    
    char t[20];

    while(*p!=ch&&*p!='\0')
    {//确定字符ch的位置
        //printf("p=%p,*p=%c\n",p,*p);
        p++;
        
    }
    if(*p=='\0'){  //如果没有找到指定字符退出 
        return ;
    }
    
    strcpy(t,++p);  //把字符串a找到指定字符后的字符串复制备份到数组t 
    

    while(*b!='\0')  //把数组b复制到字符串a指定位置后面 
    {
        
        *p=*b;
        b++; 
        p++;
        
        
//        q=p;
//        while(*q!='\0')
//        { //确定a[]的最后的位置 
//            q++;
//        }
//        while(q>=p)
//        {//a[]向后移一个位置 
//            *(q+1)=*(q--);
//        }
//        *(++q)=*(b++);//将b[]的一个字符赋给a[] 
//        p++;
    } 
     
    strcpy(p,t);  //把字符串a后面的字符串接到新增部分后面 
//    int i=0; 
//    while(t[i]='\0'){
//        *p=t[i];
//        p++;
//        i++;
//    }
     

}