IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

implémentation de strlen()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut implémentation de strlen()
    Ce programme simule le fonctionnement de strlen() (qui étant donné une chaine de caractère elle retourne sa longueur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include<stdio.h>
    #define N 100
     
    main()
    {
    	char c,ch[N];
    	int i;
     
    	printf("donner la chaine de caractères : ");
    	gets(ch);
     
    	i=0;
    	c=ch[i];
     
    	while (c!='\0') {i++;}
    	i--;
    	printf("La longueur de la chaine de caracteres est %d",i);
     
    	return 0;
    }
    Je ne comprends pas pourquoi une fois exécuté il se comporte comme si la boucle est infini !

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Essaye de bien réfléchir sur ce que fait ton code.
    Met des printf pour afficher la valeur de tes différentes variables ou utilise un debogueur.

    Ton erreur est assez simple mais il vaut mieux que tu la découvre par toi-même.

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut

    c'est bon !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include<stdio.h>
    #define N 100
     
    main()
    {
    	char c,ch[N];
    	int i;
     
    	printf("donner la chaine de caractères : ");
    	gets(ch);
     
    	i=0;
    	c=ch[i];
     
    	while (c!='\0') 
    {i++;}
    	i--;
    	printf("La longueur de la chaine de caracteres est %d",i);
     
    	return 0;
    }

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Essaye d'afficher la valeur de certaines variables dans ta boucle pour voir ce qui se passe.

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut

    c'est bon !
    Il m'a fallut redéfinir à chaque fois c
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include<stdio.h>
    #define N 100
     
    main()
    {
    	char c,ch[N];
    	int i;
     
    	printf("donner la chaine de caractères : ");
    	gets(ch);
     
    	i=0;
    	c=ch[i];
     
    	while (c!='\0') {
    		c=ch[i];
    		i++;
    		printf("%d",i);
    		}
     
    	i--;
    	printf("La longueur de la chaine de caracteres est %d",i);
     
    	return 0;
    }

  6. #6
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Salut,

    Maintenant que tu as trouvé la solution par toi-même (bien joué), tu peux essayer de prendre de bonnes habitudes. À titre d'exemple, il faudrait que tu évites de te servir de la fonction gets, qui possède des failles de sécurité bien connues, et qui ne devrait pas être conseillée (même à des débutants). Si tu te sens à l'aise, tu peux essayer de t'entraîner à utiliser fgets (n'hésite pas, si tu as des problèmes de compréhension vis-à-vis de sa documentation).

    Par ailleurs, tu pourrais assez simplement te passer de la variable c en utilisant le caractère courant comme condition de boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (ch[i] != '\0') ++i;
    Mais ce n'est pas très important.

    Bonne soirée.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  7. #7
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    merci Kirilenko

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    il faudrait que tu évites de te servir de la fonction gets, qui possède des failles de sécurité bien connues, et qui ne devrait pas être conseillée (même à des débutants).
    N'aies pas peur des mots, cher Kirilenko : certes fonctions devrait être interdite même au programmeur le plus expérimenté !

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/07/2004, 11h03
  2. Réponses: 8
    Dernier message: 04/06/2004, 09h13
  3. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56
  4. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo