用指针方法实现将两个有序的数组合并成一个有序数组

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

问题:用指针方法实现将两个有序的数组合并成一个有序数组

问题相关代码,请勿粘贴截图
运行结果及报错内容
#include<stdio.h>
#define N 20
int main()
{
    int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
    scanf("%d",&anum);
    for(p=a;p<a+anum;p++)
    {
        scanf("%d",p);
    }
    scanf("%d",&bnum);
    for(q=b;q<b+bnum;q++)
    {
        scanf("%d",q);
    }
    for(p=a,q=b,r=c;p<a+anum,q<b+bnum,r<c+anum+bnum;r++)
    {
        if(*p>*q)
        {
            *r=*q;
            q++;
        }
        else
        {
            *r=*p;
            p++;
        }
    }
    if(p<a+anum&&q>=b+bnum)
    {
        for(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
        {
            *r=*p;
        }
    }
    if(p>=a+anum&&q<b+bnum)
    {
        for(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
        {
            *r=*q;
        }
    }
    for(r=c;r<c+anum+bnum;r++)
    {
        printf("%d ",*r);
    }
    return 0;
}
输入:2
0 1
3
2 3 4
输出:
0 1 后面3个数都是很大的数。

我的解答思路和尝试过的方法
我想要达到的结果

修改如下,供参考:

#include<stdio.h>
#define N 20
int main()
{
    int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
    scanf("%d",&anum);
    for(p=a;p<a+anum;p++)
    {
        scanf("%d",p);
    }
    scanf("%d",&bnum);
    for(q=b;q<b+bnum;q++)
    {
        scanf("%d",q);
    }
    for(p=a,q=b,r=c;p<a+anum && q<b+bnum ;)//,r<c+anum+bnum;r++)
    {
        if(*p>*q)
        {
            *r++=*q++;
            //q++;
        }
        else
        {
            *r++=*p++;
            //p++;
        }
    }
    if(p<a+anum)   //&&q>=b+bnum)
    {
        for(;p<a+anum;)//(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
        {
            *r++=*p++;
        }
    }
    else if(q<b+bnum)  //p>=a+anum&&
    {
        for(;q<b+bnum;)//(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
        {
            *r++=*q++;
        }
    }
    for(r=c;r<c+anum+bnum;r++)
    {
        printf("%d ",*r);
    }
    return 0;
}