Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1681 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème de traitement des paramètre avec getopt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de traitement des paramètre avec getopt

n°1364227
julien_54
Posté le 11-05-2006 à 14:47:16  profilanswer
 

Bonjour,
 
je n'ai pas trouvé de sujet la dessus (j'ai peut être mal cherché), donc je pose la question.
 
J'essai de faire un traitement des paramètres de la ligne de commande (argc argv), le plus propre possible.
 
Mon problème concerne l'utilisation de la commande getopt ; j'ai lu dans la spécification que la commande renvoie le caractère ':' si une option devant etre  
suivie par un paramètre n'en a pas .
 
Or cela ne marche pas avec mon programme. En effet, si je lui passe "program -c -v", sachant que l'option -c demande un paramètre (-v pour le mode verbose, donc pas de paramètre),
la commande getopt ne renvoi pas ':' et du coup mon programme interpréte "-v" comme le paramètre de l'option "-c".
 
J'ai aussi lu que certaines versions de getopt sont buggée, mais l'explication était floue...
 
Ce problème parle t'il à quelqun ?

mood
Publicité
Posté le 11-05-2006 à 14:47:16  profilanswer
 

n°1364354
julien_54
Posté le 11-05-2006 à 16:00:08  profilanswer
 

Personne n'a d'idée ?

n°1364548
olivthill
Posté le 11-05-2006 à 18:42:03  profilanswer
 

La question serait plus compréhensible si le code était joint.
Pour le cas présent, je coderais cela de la manière suivante :

int main(int argc, char **argv)
{
   extern char *optarg;  
   int o; char verbose_flag, parametre_c[128];
   verbose_flag = 'N';
   parametre_c[0] = '\0';
 
   while((o = getopt(argc, argv, "c:v" )) != EOF) {  
      switch(o) {  
        case 'v': verbose_flag = 'O'; break ;  
        case 'c': strcpy(parametre_c, optarg); break;  
     }  
   }
   ....
}


Message édité par olivthill le 11-05-2006 à 18:50:02
n°1364558
Sve@r
Posté le 11-05-2006 à 18:56:58  profilanswer
 

julien_54 a écrit :

...j'ai peut être mal cherché...


Peut-être...
 

julien_54 a écrit :

Ce problème parle t'il à quelqun ?


A beaucoup de monde. Mais le mieux est que tu lises toi-même la doc => http://man.developpez.com/man3/getopt.3.php


Message édité par Sve@r le 11-05-2006 à 19:01:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1364882
julien_54
Posté le 12-05-2006 à 10:53:22  profilanswer
 

J'ai lu la spécification, et j'ai surtout lu ca :
 
"La fonction getopt() renvoie le caractère de l'option s'il en trouve une, `:' s'il manque un paramètre pour une option, `?' s'il y a un caractère inconnu, et EOF (-1) à la fin de la liste des options. "
 
Le problème c'est que ce n'est pas le comportement que j'observe... je voulais juste savoir si c'est un bug connu, où si c'est moi qui l'utilise mal

Code :
  1. int argumentsComputing(int argc,char **argv,char *c_filename,int *verbose)
  2. {
  3. int c=0;
  4.   /* switch on each argument */
  5.   while ((c = getopt(argc, argv, ":c:v" )) != EOF)
  6.   {
  7.     switch (c)
  8.     {
  9.       case 'v':
  10. *verbose=1 ;
  11. break;
  12.       case 'c':
  13. if ((c_filename=(char *)calloc(sizeof(char),strlen(optarg)+1))==NULL)
  14. {
  15.   printf("! Problem when allocating memory ! #Verif-1#\n" );
  16.   return -1;
  17. }
  18. if (strcpy(c_filename,optarg)==NULL)
  19. {
  20.   printf("! Problem when copying string argument ! #Verif-2#\n" );
  21.   return -1;
  22. }
  23. printf("%s\n",c_filename);
  24. break;
  25.       case ':':
  26. printf("! Problem : option -%c requires an operand ! #Verif-3#\n", optopt);
  27. return -1;
  28.       case '?':
  29. printf("! Problem : unrecognized option : -%c ! #Verif-4#\n",optopt);
  30. return -1;
  31.      
  32.     }
  33.   }
  34.   return 0;
  35. }


Message édité par julien_54 le 12-05-2006 à 10:56:20
n°1364912
olivthill
Posté le 12-05-2006 à 11:06:24  profilanswer
 

Je crois que le problème se situe sur la ligne

while ((c = getopt(argc, argv, ":c:v" )) != EOF)

Au lieu de ":c:v", il faudrait avoir "c:v".

n°1364923
julien_54
Posté le 12-05-2006 à 11:13:51  profilanswer
 

olivthill a écrit :

Je crois que le problème se situe sur la ligne

while ((c = getopt(argc, argv, ":c:v" )) != EOF)

Au lieu de ":c:v", il faudrait avoir "c:v".


 
Oui mais non, man de getopt :  
 


[i]Si le premier caractère de optstring est un deux-points (`:'), alors getopt() renvoie `:' plutôt que `?' pour indiquer un argument d'option manquant.[/i]


 
De toute façon, j'ai essayé avec et sans le ':' ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème de traitement des paramètre avec getopt

 

Sujets relatifs
Probléme MATLABProblème JFrame et JComponent
Comment boucler sur une page après un traitement?probleme avec mon RTE (rich text editor)
probleme Debian Sarge 3.1 PHP5 SendMailproblème de Style: véritable casse-tete! Help
Probleme liens pages php et repertoire...Problème de perte de variable publique d'un formulaire au chargement d
problème de lecture d'un fichier en cobol[JavaScript] Problème avec un cookie
Plus de sujets relatifs à : Problème de traitement des paramètre avec getopt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR