Longueur chaine de caractère "C"

Discutez d'informatique ici !
johnashhh
Membre Naturel
Messages: 18
Enregistré le: 19 Avr 2009, 21:03

Longueur chaine de caractère "C"

par johnashhh » 10 Mar 2010, 12:33

Bonjour!

Comment mesurer la longueur d'une chaine de caractères en C lorsque celle-ci n'est pas "const"?
J'ai utilisé strlen mais ça ne marche pas!

Merci pour vos réponses



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 10 Mar 2010, 13:49

salut,

voir chez developpez. pour plus de précision sur pourquoi pour toi ca marche pas.
Sinon, tu peux tenter un
Code: Tout sélectionner
i=0;
while(maChaine[i] != '\0') i++;

M'enfin je passerais plutot par une déclaration plus propre et l'emploi d'strlen...
la vie est une fête :)

zenaf
Membre Naturel
Messages: 98
Enregistré le: 18 Jan 2007, 16:21

par zenaf » 12 Mar 2010, 15:48

2 idées du pourquoi ca ne marcherais pas (pas sur mais à vérifier):
- inclure la librairie
- vérifier que ta chaine se termine bien par le caractère de fin de chaine (à savoir le caractère '\0'

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 12 Mar 2010, 16:07

salut zenaf,

la déclaration d'un
char *s3 = "kikoolol"
La dernière méthode ne réserve pas de mémoire, elle se contente de stocker l'adresse d'une chaîne de caractères qui peut se trouver dans un endroit de la mémoire non modifiable par le programme, dans ce cas toute modification de la chaîne s3 se conclura par un comportement indéterminé.


Effectivement jme suis un peu embrouillé sur ce qui était fait et demandé.
Donc si c'est pour mesurer la taille de la chaine, sous réserve de la présence du caractere fin de chaine, strlen marche tres bien.

En revanche, si c'est pour faire une déclaration sans le mot clé const, c'est bancal. J'ai fait un amalgame avec le fait de modifier la chaine si elle était déclarée comme ci-dessus, et prendre le strlen d'une chaine déclarée comme ci-dessus.
la vie est une fête :)

anima
Membre Transcendant
Messages: 3762
Enregistré le: 15 Sep 2006, 12:00

par anima » 14 Mar 2010, 12:58

Si tu as une chaine définie comme un argument de programme (int main(int argc, char **argv)), il y a un moyen assez sympa de trouver la longueur d'une telle chaine. Cette méthode nécessite cependant stdlib.h, qui est de toute facon surement inclue par défaut.

Le language C traite une chaine comme un pointeur vers un tableau de caracteres (en gros, char chaine[23] = char *chaine; chaine = malloc(23 * sizeof(char))). La magie en question est que sizeof(chaine)/sizeof(char) retourne 23!
Ceci est possible pour toute chaine stockée en mémoire, tant que la chaine en question est bien définie (i.e. pas de char *test="kikoolol";).

Autre pépin, cette méthode retourne la longueur de chaine maximale (i.e. le nombre maximum de bits stockés) et non pas la longueur de la chaine présente.

(L'exemple pris au début de char **argv n'est pas forcément le plus direct: il s'agit d'une chaine de chaines de caractere. Cependant, il est tout a fait possible de trouver le nombre de sous-chaines avec la meme méthode)

uztop
Membre Complexe
Messages: 2396
Enregistré le: 12 Sep 2007, 12:00

par uztop » 15 Mar 2010, 20:51

oui enfin attention, les chaines de caractères se terminent par '\0' et donc si on définit: char* test = "kikoolol";
on a: strlen(test) = 8 mais sizeof(test) = 9

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 9 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite