Reprogrammer strlen et strcpy

Contenu du snippet

Voici comment reprogrammer certaines fonctions
qui gerent les chaines de caracteres.
Elles sont toutes deja faites dans <string.h>
Ici on reprogrammera les fonctions :
- strlen
- strcpy

Tout d'abord quelques petits rappels betes et mechants:

Soit <p> une chaine de caractere qui est "abc xyz"
p est un pointeur sur le premier caractere i.e. 'a'
p est egal a "abc xyz"
  • p est egal a sur quoi pointe p i.e. 'a'
  • (p+1) est egal a sur le caractere suivant i.e. 'b'
  • (p+3) est egal a ' '
  • (p+6) est egal a 'z'
  • (p+6) est egal a 'z' --- caractere d'arret ---
  • (p+8) est indetermine : *(p+8) = ???


Maintenant on execute l'instruction suivante :
p ++;
On a donc :
p est egal a "bc xyz"
  • p est egal a sur quoi pointe p i.e. 'b'
  • (p+1) est egal a sur le caractere suivant i.e. 'c'
  • (p+2) est egal a ' '
  • (p+5) est egal a 'z'
  • (p+6) est egal a '\0' --- caractere d'arret ---
  • (p+7) est indetermine : *(p+7) = ???


Maintenant on execute l'instruction suivante :
p += 6;
On a donc :
p est egal a "" --- chaine nulle ---
  • p est egal a sur quoi pointe p i.e. '\0'
  • (p+1) est indetermine : *(p+6) = ???


c'en est fini pour les petits rappels

Source / Exemple :


#include <stdio.h>

int myStrlen(const char *p)  // Elle retourne la longueur de la chaine <p>
{
int count;

count = 0;

do
  {
  if(*p == '\0')
	 {
	 break;
	 }
  else
	 {
	 p     ++;
	 count ++;
	 }
  }while(1);

return count;
}

//
//  Fonction  : <myStrcpy>
//
//  Retourne  : le nombre de caractere copie y compris le '\0'

//  <pDest> : Destination
//  <pScr>  : Source
int myStrcpy(char *pDest,const char *pScr)
{
int count;

count = 0;

do
  {

  • pDest = *pScr;
count ++; if(*pScr == '\0') { break; } pDest ++; pScr ++; }while(1); return count; } // ------------------------------------------------------ // int main(int argc,char **argv) { char text[256] = "Coucou"; char buf[256]; int countBuf; // pour n'avoir aucun Warning ... (void) argc; (void) argv; printf("Taille de '%s' = %d\n",text,myStrlen(text)); countBuf = myStrcpy(buf,text); // c'est complique : \'\\0\' // tout ca pour ecrire : '\0' a l'ecran printf("Taille de '%s' = %d --- avec le \'\\0\' ---\n",buf,countBuf); // aucun erreur, on retourne 0 return 0; }

Conclusion :


Voila c'est fini ...
Reprogrammer des fonctions deja faites n'est pas bien utile
mais il est bien de savoir comment elles peuvent etre programmees

je dis bien "elles peuvent" car elle ne sont pas programmer exactement
comme ci-dessus

- Tout bug est le bienvenu
- Les remarques aussi
- Les commentaires aussi
- Les critiques aussi
- ...

=> Enfin tout ce que vous avez a dire sur ce programme

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.