Zsh: segmentation fault
falco
-
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;
}
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
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 ".
Voir la loi de " Murphy ".
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.
#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.
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 :
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 ;-).
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; }