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;
}

3 réponses

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
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
falco
 
Merci beaucoup pour ton aide!
Je vais essayer de finir mon programme grâce à ton aide.
Bonne continuation.
0