Zsh: segmentation fault

Fermé
falco - 17 mars 2009 à 00:49
 falco - 17 mars 2009 à 02:06
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;
}
A voir également:

3 réponses

Profil bloqué
17 mars 2009 à 00:56
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
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
fiddy Messages postés 11067 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 813
17 mars 2009 à 01:43
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
Merci beaucoup pour ton aide!
Je vais essayer de finir mon programme grâce à ton aide.
Bonne continuation.
0