Aide pour strlen en c

dacosta Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
haydens Messages postés 81 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j voudrais savoir a koi ca sert strlen en c et comment en l'utiliser.si possible pourrez vous faire 1programme avc strlen pour que je puisse mieux comprendre

7 réponses

D-Predator Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   80
 
strlen retourne le nombre de caractères dans une chaine de caractère char*, en les comptants jusqu'au zéro terminal, mais sans compter celui-ci dans le total.
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char *string = "Hello World";
    printf("%lu\n", (unsigned long)strlen(string));
    return 0;
}

affiche 11, car strlen retourne 11
25
greg
 
Salut,
si tu veux gagner du temps, sache que GOOGLE est un bien meilleur allié que les forums pour ta connaissance des fonctions !
strlen te renvoi simplement la taille d'une chaine de caractère.

Petit exemple :
char mystr[100]="test string";
i = strlen(mystr); // i vaudra 11, car même l'espace compte pour un caractère.

C'est utile pour faire des manipulations sur les chaines de caractères.

A++, Greg.
9
tsou
 
bonjour,

//strlen()

//Syntaxe:
//#include <string.h>
//size_t strlen( char *str );

//Description:
//La fonction strlen() returne la longueur de la chaine de caracteres str (determinee par le nombre de caracteres //avant le caractere qui indique la fin de la chaine .ce caractere etant '\0'.




// EXEMPLE


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

char s1[] ;
int lg;
int main(int argc, char *argv[])
{

strcpy(s1,"abcde");
lg = strlen(s1);
printf("la longueur de la chaine s1 est %d :",lg);
system("PAUSE");
return 0;
}
3
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
Ton programme ne compilera pas à cause de la ligne : char s1[];
Soit tu mets un pointeur, soit tu mentionnes la longueur du tableau.
Cdt
0
tsou
 
il n`y a aucun warning lorsqu`on le compile su devc++ j`aimerai savoir sur quel compilateur
tu l`as compile ?
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Peut-être que tu n'as pas généré tous les Warnings ;)
J'utilise gcc.
En tout cas, que ton programme donne Warning ou pas, ce n'est pas une bonne habitude.
De plus, ton résultat donne le résultat escompté, mais c'est une coïncidence. Rien ne te garantit le bon résultat.
En effet, tu utilises char s1[]; et ensuite strcpy. Tu n'as pas réalisé l'allocation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
haydens Messages postés 81 Date d'inscription   Statut Membre Dernière intervention   5
 
Fiddy a totalement raison, désolé de dire ça.

Mais enter le char s1[]; et les variables globales sur un programme de 10 lignes ça fait beaucoup.
Même si ça marche c'est pas une bonne habitude a avoir, les variables globales sont a éviter tout comme le "goto" est a bannir (j'exagere? oui sans doute un peu)
1
tsou
 
bonjour,

le programme a ete compile sur devc++ et donne le resultat escompte.
avant d`affirmer n`importe quoi il faudrait peut etre aller le tester et si ca ne marche pas
rapporter alors l`erreur .
on est ici pour s`entraider pas pour montrer se biceps...

salut.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
on est ici pour s`entraider pas pour montrer se biceps
Oui, pour s'entraider, sauf que ton programme donne des Warnings. Et ça se comprends facilement. Quand on donne des conseils, on donne les bonnes habitudes. Voilà pourquoi je suis intervenu ;)
0
tsou
 
il n`y a pas de coincidence en informatique , seul un ignorant peut penser ca.
et je n`ai pas envie de polemiquer avec un ignorant.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Tu me fais rire.
Vois-tu, ton programme pourrait être sujet à un buffer overflow vu que tu ne fais pas d'allocation. Mais tu as de la chance, tu travailles avec un compilateur intelligent. Sauf que c'est clairement pas une bonne idée. De plus utiliser strcpy, est une mauvaise idée. Vaut mieux utiliser strncpy.
Et puis, puisque tu mérites que je critique encore un peu plus ton code. Utiliser des variables globales, c'est pas une bonne habitude.

Effectivement "coïncidence" n'est pas le terme le mieux adapté. Mais, un programme peut marcher dans certain cas alors qu'il ne devrait pas grâce à un certain état de la pile (ce que j'entendais par coïncidence). Ici dans ton cas, tu as de la chance qu'un \0 termine ta chaîne mais rien ne te le garantit puisque tu n'as pas réalisé correctement l'allocation statique.

Prends exemple sur le code de D-Predator. Clair et concis.
0