Posez votre question Signaler

Zsh: segmentation fault

falco - Dernière réponse le 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;
}
Lire la suite 

Zsh: segmentation fault »

4 réponses
Réponse
+0
moins plus
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 ".
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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;
} 
falco - 17 mars 2009 à 02:06
Merci beaucoup pour ton aide!
Je vais essayer de finir mon programme grâce à ton aide.
Bonne continuation.
Ajouter un commentaire
Ce document intitulé « zsh: segmentation fault » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?