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 :

Erreur de segmentation.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut Erreur de segmentation.
    bonjour,
    je viens d'avoir cette erreur pour la première fois.
    Segmentation fault.

    mon code supposé inverser les mots d'une phrase est le suivant:
    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
     
    #include<stdio.h>
    #include<string.h>
    int main()
    {
     
    char phrase[125]="je suis parti.",mot[5][25];
    printf("votre phrase svp!\n");
    //gets(phrase);
    int i=0,j=0,k=0;
    while(i<125 && k<5)
          {while(phrase[i]!=' '||phrase[i]!='.')            
                mot[k][j++]=phrase[i++];
                j=0;
                k++;
                i++;
                }
       for(i=4;i>-1;i--)
       {puts(mot[i]);printf("\n");}   
     
     
    getchar();
    getchar();
    }
    mes deux complilateurs ont crashé suite a une coupure de courant, et j'utilise temporairement sourceLair .
    Merci beaucoup d'avance

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Bonsoir,

    Mettez votre code entre les balises CODE svp.

    Votre code n'est pas bon du tout. Il ne faut jamais utiliser gets(), utiliser scanf ou fgets().

    Vous avez une segfault parce que vous ne vérifiez pas bien les indices. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while(phrase[i]!=' '||phrase[i]!='.')
    mot[k][j++]=phrase[i++];
    Et si il n'y a jamais d'espace ou de point ?

    Utiliser strtok via l'include "string.h" (taper man strtok dans google pour connaitre ses détails) qui vous permettra de séparer la chaine en token (partie).

    Ensuite pour vérifier la fin d'une chaine, ne comptez pas sur un "." mais plutôt sur le caractère '\0' qui signale la fin d'une chaine en C.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut
    bon voila avec scanf () ça marche bien il n'ya aucun problem..
    mais j'aimerais bien découvrir l'erreur
    j'ai corrigé les conditions d'arret,mais en vein.

    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
     
    #include<stdio.h>
    #include<string.h>
    int main()
    {
     
    char phrase[125]="je suis parti",mot[5][25]; //
     
    printf("votre phrase svp!\n");
     
    int i=0,j=0,k=0;
     
    while(i<125 && k<5 && phrase[i]!='\0')
          {while(phrase[i]!=' '|| phrase[i]!='\0')            
                mot[k][j++]=phrase[i++];
                j=0;
                k++;
                i++;
                }
     
    for(i=4;i>-1;i--)  
    {puts(mot[i]);printf("\n");}   
     
    }

  4. #4
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(phrase[i]!=' '|| phrase[i]!='\0')
    Tant que un caractère dans la phrase est différent d'un espace ET que ce n'est pas la fin.

    Votre expression booléenne renverra toujours TRUE parce qu'un caractère ne peut pas être à la fois un espace et la fin.

    Et réfléchissez à ce qu'il se passe si un mot fait plus de 25 caractères...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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