Concatenate two Strings Lexically without using any library function

Get two strings from the user and Concatenate the two strings lexically without using any library function


Implementation:

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

/* Swap function to swap the addresses of the pointers to the character array block */
void swap(char **x,char **y)
{
   char *temp;
   temp=*x;
   *x=*y;
   *y=temp;
}

/* Manual Compare function for strcmp() to compare two strings */
int compare(char *s,char *v)
{
 
 /* work until each character in the strings are equal and character of first string
 not equals,  '\0' null character(end of the string) */
   while(*s && (*s==*v))
    s++,v++;
    
   /* If the two strings are equal , ascii difference of null character in both 
   the strings difference is returned */
   /* Else the ascii difference of the mismatched characters is returned */
   return (*s-*v);
}

/* User-defined function for strcpy() */
/* Copy the second string from the end of the first string */
char* copy(char *x,char *y)
{
   int len=strlen(x);
   while(*y)
   {
     *(x+len)=*y;
     y++;
     len++;
   }
   
   /* Mark the end of the string */
   *(x+len)='\0';
   
   /* Return the address of the copied string */
   return x;
}

int main(void) {
 
 /* Character pointers to store the address of the character array blocks */
   char *s,*v;
   
   /* Dynamically allocate the memory block, where each cell has a sizeof character
   and return the starting address of the block as character pointer */
   s=(char*)malloc(sizeof(char));
   v=(char*)malloc(sizeof(char));
   
   /* Get the two strings from the user */
   scanf("%s",s);
   scanf("%s",v);
   
   /* Compare function to compare the strings */
   /* If the result of the compare function is greater than zero */
   /* It means that, the first string 's' has greater string and second string 
   'v' has smaller string */
   if(compare(s,v)>0)
   {
    /* Swap if the first string is greater than the second string */
     swap(&s,&v);
   }
   
   /* Copy the second string to first string */
   s=copy(s,v);
   
   /* Display the resultant string */
   printf("%s",s);
   return 0;
}