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;
}
fiddy
Messages postés11069Date d'inscriptionsamedi 5 mai 2007StatutContributeurDernière intervention23 avril 20221 842 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;
}
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.