c语动态数组 的问题 把两个有序的数组合成一个数组

想问下动态数组的问题,要两个有序的数组合成一个,一次性完成。
#include stidio.h
int main()
{
int *a;//是不是这里用指针,等下就可以用realloc了。
int *b;
int i=0,j=0,k;
printf ("请输入第一个数组:\n");

 while (  scanf("%d",&a[i])==1&&a[i]!='\n')
 {
     i++;
 }
 a[i]='\0';
 printf ("输入第二个数组:\n");
 while (scanf("%d",&b[j])==1&&b[i]!='\n')
 {
     j++;
 }
 b[i]='\0';
 j--;
 k=i+j;
 a=(int *)realloc(a,k*sizeof(int));//用realloc 怎么扩充之前的数组同时又
 i=0;不覆盖之前的数组?
 j=0;
 while (i<k)
 {
     while (a[i]!='\0'&&b[j]!='\0')
     {
         if(a[i]<b[j])
         {
             i++;
         }
         else if(a[i]>b[j])
         {
             a[i++]=b[j++];
         }
         else 
         {
             i++;
             j++;
         }
     }
     while (a[i]!='\0')
     {
         i++;
     }
     while(b[j]!='\0')
     {
         a[i++]=b[j++];
     }
 }
     i=0;
     while (a[i]!='\0')
     printf ("%d",a[i]);
     return 0;

}

realloc()会调整你以前使用malloc()函数申请的内存,realloc()会先检查用malloc()函数申请的内存空间的地址起始开始是否有连续的空间满足
你要调整的空间大小,如果没有,就会重新开辟一块,然后把以前的数据拷贝过去,然后释放malloc()所申请内存空间的指针。但是如果你调整的小于malloc()申请的内存空间时,有可能会造成数据丢失。

还有你的程序中,你要的是两个整型数组,为什么还要在数组结尾加‘\0'?又不是字符数组。要两个有序数组合并成一个有序数组,你可以看看归并排序的实现,很相似。

数组合并的算法网上很多,realloc是调整大小,不会影响原有数据,当然分配地址可能会改变

realloc的策略是,如果能放下,就扩展数组,否则就再开辟一块整体搬动过去。