on va voir les syntaxes et les usages.
/*
STRLEN sans string.h
par recopie de variable (passage par valeur)
*/
#include <stdio.h>
#include <stdlib.h>
int lgchaine(char *chaine)
{
int compteur;
compteur=0;
while (chaine[compteur]!=0) compteur++;
return compteur;
}
int main (int argc , char **argv)
{
int cpt;
cpt=lgchaine("Bonjour");
printf ("%d \n",cpt);
return EXIT_SUCCESS;
}
Passage par référence aussi, mais on utilise l'opérateur * (pointeur) et non pas [] ici
Même résultat cependant
/*****************************************/
/* STRLEN en ne passant pas par string.h */
/* notation avec pointeur (*) */
/* int lgchaine (char *chaine) */
/* par recopie de variable */
/*****************************************/
#include <stdio.h>
#include <stdlib.h>
int lgchaine(char * chaine)
{
int compteur;
compteur=0;
while ((*chaine++)!=0) compteur++;
return compteur;
}
int main (int argc , char **argv)
{
int cpt;
cpt=lgchaine("Bonjour");
printf ("%d \n",cpt);
return EXIT_SUCCESS;
}
En C la chaîne est défini par l'adresse de son premier char
chaine = &chaine[0]
/*
STRLEN sans string.h
par recopie de variable (passage par référence)
(*chaine=chaine)
*/
#include <stdio.h>
#include <stdlib.h>
int lgchaine(char *chaine)
{
int compteur;
compteur=0;
*chaine='b'; /* B en b */
while (*chaine++!=0) compteur++;
return compteur;
}
int main (int argc , char **argv)
{
int cpt;
char chaine[]="Bonjour"; /* string en statique */
cpt=lgchaine(chaine); /* on passe l'adresse ici c'est une chaine chaine = &chaine[0] */
printf ("%d \n",cpt);
return EXIT_SUCCESS;
}
On a bien passé la chaine (et on a modifié B en b ! )
poly1@workboot:~/Works/TDC/lgchaineppa $ ./lgchaine
7
bonjour
(*chaine=chaine)
/*
STRLEN sans string.h
par recopie de variable (passage par référence)
(*chaine=chaine)
*/
#include <stdio.h>
#include <stdlib.h>
int lgchaine(char *chaine)
{
int compteur;
compteur=0;
*chaine='b';
while (*chaine++!=0) compteur++;
return compteur;
}
int main (int argc , char **argv)
{
int cpt;
char chaine[]="Bonjour"; /* string en statique */
cpt=lgchaine(&chaine[0]); /* passage de l'adresse du premier caractère (chaine=&chaine[0]) */
printf ("%d \n",cpt);
printf ("%s \n", chaine);
return EXIT_SUCCESS;
}
on peut constater que ici on utilise les pointeurs
avec le boucle for mais qui revient à faire ce que nous avons produit.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc ,char **argv)
{
int cpt;
cpt = strlen("Bonjour");
printf("%d \n",cpt);
return EXIT_SUCCESS;
}