Zsh: segmentation fault

falco -  
 falco -
Bonjour,

J'aurais besoin d'un petit coup de main.
Je cherche à créer un programme en C mais j'ai le message d'erreur "zsh: segmentation fault" qui apparait quand je réalise des tests.
Je vous mets le morceau de code qui me pose problème en espérant que quelqu'un pourra m'aider.
Merci d'avance.

int main (int argc, char* argv[])
{
if(strcmp(argv[1],"-compare")==0 && argc < 3)
{
printf("Invalid number of option for -compare");
return 0;
}
Configuration: Windows Vista
Firefox 3.0.7

3 réponses

  1. Profil bloqué
     
    Bonjour, un morceau de code, n'est qu'un morceau de code, quand on est sur que l'erreur ne vient pas de là ! ....
    Voir la loi de " Murphy ".
    0
  2. falco
     
    D'accord, je poste tout ce que j'ai fait.

    #include <stdio.h>
    #include <string.h>
    #include "dna.h"

    int main (int argc, char* argv[])
    {
    if(argc < 2)
    {
    printf("Usage: %s -option arguments", argv[0]);
    return 1;
    }
    if(strcmp(argv[1],"-compare")==0)
    {
    if(strcmp(argv[2],argv[3])==0)
    printf ("Strings are equal");
    if(strcmp(argv[2],argv[3])!=0)
    printf ("Strings are different");
    return 1;
    }
    if(strcmp(argv[1],"-compare")==0 && argc < 3)
    {
    printf("Invalid number of option for -compare");
    return 0;
    }
    return 1;
    }

    J'ai aussi codé plusieurs fonctions dont je suis sensé me servir après mais pour l'instant elles n'interviennent pas.
    0
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Le message d'erreur est dû à une mauvaise gestion du nombre de paramètres. Lorsque tu tu lances en ligne de commande : ./programme -compare, tu rentres dans : if(strcmp(argv[1],"-compare")==0)
    Et après, l'instruction strcmp(argv[2],argv[3]) provoque le segfault car argv[3] n'existe pas.
    Dans ton programme il suffit de mettre if (argc<4). Pas besoin de répeter if strcmp puisque tu es déjà dans la boucle if(strcmp(argv[1],"-compare")==0)
    De plus, tu n'as pas besoin de mettre if(strcmp(A,B)==0)... if(strcmp(A,B)!=0).... Utilise simplement :
    if(strcmp(A,B)==0) {
        //blabla
    }
    else {
       //blabla
    }
    


    Et enfin, en C, lorsque le programme s'est déroulé correctement, il retourne 0 et non 1.

    Voici la modification de ton programme. Je te laisse corriger pour le return ;-).
    if(strcmp(argv[1],"-compare")==0)
    {
    
    if(argc < 4)
    {
    printf("Invalid number of option for -compare");
    return 0;
    }
    
    if(strcmp(argv[2],argv[3])==0)
    printf ("Strings are equal");
    else
    printf ("Strings are different");
    return 1;
    }
    
    return 1;
    } 
    
    0
    1. falco
       
      Merci beaucoup pour ton aide!
      Je vais essayer de finir mon programme grâce à ton aide.
      Bonne continuation.
      0