Une erreur de segmentation que je ne comprends pas...

Résolu
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007 - 31 août 2005 à 07:44
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007 - 31 août 2005 à 10:51
Voilà, je débute en C, j'ai quelques connaissances dans d'autres langages (surtout php et scripts bash).



Je tourne sous plateforme Linux Debian 3.1 et j'utilise Kdevelop3 en IDE.



Voilà, j'ai un code très simple (pour l'instant) et j'ai une erreur de
segmentation si j'execute le programme sans arguments. Sinon le reste
fonctionne. C'est très basique et tout de suite le code ne sert à rien
mais j'essaye de m'habituer au langage en faisant divers tests pour
saisir les différences de langage. Voici la portion de code je ne
comprends pas. Je voudrais seuleument verifier si il existe au moins un
paramètre. J'ai essayé des tentatives en vain avec une ligne du genre:



if (argc = 0) { mon instruction } else {bla bla bla}...



Le code:



#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "aw_var.h"



int main(int argc,char *argv[])

{

if (strcmp(argv[1],Param_START) == 0)

{

printf ("%s. \n", Param_START);

}



if (strcmp(argv[1],Param_STOP) ==0)

{

printf ("%s. \n", Param_STOP);

}

exit(0);

}



C'est vraiment stupide comme code mais le but est simplement de comprendre...



Que dois je mettre pour qu'il me sorte un message si il n'y a aucun paramètre?

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
31 août 2005 à 10:46
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "aw_var.h"

int main(int argc,char *argv[])
{
if (argc <=1 )
{
printf ("Vous devez passer un paramètre. \n");
exit(0);
}
else
{
if (strcmp(argv[1],Param_START)==0)
{
printf ("%s. \n", Param_START);
}

if (strcmp(argv[1],Param_STOP)==0)
{
printf ("%s. \n", Param_STOP);
}
exit(0);
}
}

C'est
plutot argc <= 1 et non argc < 1 qu'il faut. Il y a
toujours un paramètre: le nom de l'éxécutable. Et meme si argc = 1,
seul argv[0] existe.
3
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007
31 août 2005 à 07:58
J'ai vu ce genre de code trainer mais ca ne marche pas, j'ai toujours "erreur de segmentation" si je n'ai aucun paramètre...



#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "aw_var.h"



int main(int argc,char *argv[])

{

if (argc<1)

{

printf ("Vous devez passer un paramètre. \n");

exit(0);

}

else

{

if (strcmp(argv[1],Param_START)==0)

{

printf ("%s. \n", Param_START);

}



if (strcmp(argv[1],Param_STOP)==0)

{

printf ("%s. \n", Param_STOP);

}

exit(0);

}

}
0
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007
31 août 2005 à 08:48
Aidez-moi s'il vous plait...
0
simtiers Messages postés 207 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
31 août 2005 à 10:32
Tu es sûr que Param_START et Param_STOP se termine par un caractère \0 (ou equivalent de fin de chaine)

Sinon, utilise strncmp, le dernier paramètre étant le nombre de caractères à comparer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007
31 août 2005 à 10:47
Param_START et Param_STOP sont définis dans aw_var.h de cette façon:



#define Param_START "start"

#define Param_STOP "stop"



Mais ces paramètres fonctionnent lorsque je les passe. Si je fais:



./essai start ou ./essai stop , il se passe ce qui doit se passer, ca me retourne la valeur de Param_STOP ou _START. Mais si je tape seuleument ./essai ,
ca me retourne "erreur de segmentation". Donc je pense que ca se situe
ailleurs? En fait j'en sais rien, je débute dans ce langage, et je ne
peux pas en dire plus, malheureuseument...



Merci de répondre en tout cas!
0
semifer Messages postés 40 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 septembre 2007
31 août 2005 à 10:51
Merci luhtor! Je suis
un peu stupide des fois! La seule chose que je n'ai pas testée, tu me
la met dans la face lol... Encore merci, c'est nickel, ca fonctionne!
C'était pourtant si évident...
0
Rejoignez-nous