/*     PROGRAMME EXEMPLE DE REECRITURE DE STRCPY     */
/*                                                   */
/* Creation : MM 03/09/2001                          */

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

/* Ecriture d'une fonction STRCPY qui copie la chaîne source dans  */
/* la chaîne destination caractère par caractère                   */
/* On suppose que les chaînes de caractères ont été allouées avant */
char * mon_strcpy(char * destination, char * source)
{
  int iCompteur;

  /* Pour tous les caractères de la chaîne source */
  /* en comptant le caractère de fin de chaîne    */
  for(iCompteur=0; iCompteur<=strlen(source); iCompteur++)
    {
      destination[iCompteur]=source[iCompteur];
      /* équivalent à *(destination+iCompteur)=*(source+iCompteur); */
    }
  return destination;
}

/* Ecriture d'une fonction STRCPY récursive                        */
/* On suppose que les chaînes de caractères ont été allouées avant */
char * mon_strcpy_recursif(char * destination, char * source)
{
  
  /* Si on est sur le dernier caractère de la chaîne */
  if(*source=='\0') 
    { /* Recopie du caractère de fin de chaîne dans destination */
      *destination=*source;
      return destination;
    }
  else
    {
     
      /* Copie du premier caractère */
      *destination=*source;
      /* Appel récursif de la fonction avec le reste de la chaîne */
      mon_strcpy_recursif(destination+1,source+1);
    }
}

/* PROGRAMME PRINCIPAL */
int main()
{
  char * cMachaine;

  cMachaine = (char*)malloc(50);
  mon_strcpy(cMachaine,"abcdefgh");
 
  printf("La chaîne copièe caractère par caractère est %s.\n Son adresse est %x.\n",cMachaine,&cMachaine); 

  mon_strcpy_recursif(cMachaine,"fghiklm");
  printf("La chaîne copièe de manière récurdive est %s.\n Son adresse est inchangée elle est : %x.\n ",cMachaine,&cMachaine); 
  
}

