Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Problème avec getopt
Envoyé par: Moonz

Bonjour,
Je me suis faitt (ou plutôt je suis en train de faire) une petite classe pour gérer plus facilement les arguments passés au programme en passant par la fonction C getopt(). A peu près tout fonctionne, il n'y a que ce petit bout de code qui coince :

std::string shortopts;
opts_map::iterator it;
struct option long_options[opts.size()];
int i = 0;

for(it=opts.begin();it!=opts.end();it++) {
shortopts += (*it).first + (*it).second->_semicolon();
longopts = {(*it).second->_longopt().c_str(), (*it).second->_argtypeid(), NULL, (*it).first};
i++;
}

long_options = {0, 0, 0, 0};

En effet, g++ se plaint d'une erreur de syntaxe avant le { de longopts = {...}. Apparament, les tableaux de struct ne fonctionnent pas. Comment puis-je contourner ce problème ? Mon but est de créer dynamiquement un tableaux de ce style (pris de la dernière version cvs de gaim) : struct option long_options[] = {
{"acct", no_argument, NULL, 'a'},
{"help", no_argument, NULL, 'h'},
{"user", required_argument, NULL, 'u'},
{"file", required_argument, NULL, 'f'},
{"debug", no_argument, NULL, 'd'},
{"version", no_argument, NULL, 'v'},
{"session", required_argument, NULL, 's'},
{0, 0, 0, 0}
};
Merci d'avance pour vos réponses !
PS : pour ceux qui ne l'auraient pas deviné, opts est de type opts_map et map de type std::map<char, Option*>.

Poste le Saturday 21 February 2004 19:50:49
Répondre     Citer    
Re: Problème avec getopt
Envoyé par: Moonz

Bon OK je sors et je m'enfuit en courant
(bon pour les ignares comme moi qui ne savaient pas encore, il fallait faire man getopt_long et on en aurait déduit ça :
for(it=opts.begin();it!=opts.end();it++) {
shortopts += (*it).first + (*it).second->_semicolon();
longopts.name = (*it).second->_longopt().c_str();
longopts.has_arg = (*it).second->_argtypeid();
longopts.flag = 0;
longopts.val = (*it).first;
i++;
}

longopts.name = 0;
longopts.has_arg = 0;
longopts.flag = 0;
longopts.val = 0;
)
Maintenant j'ai une vraie question après avoir googolé et fait man getopt_long :
comment peut ont détecter l'erreur otpion xy requiert un argument ?

Merci =)

Poste le Sunday 22 February 2004 11:49:42
Répondre     Citer    
Re: Problème avec getopt
Envoyé par: zerbro

Salut,

L'argument d'une option est stocke sous forme de chaine de caractere dans optarg.
En testant optarg tu peux donc savoir si l'argument est valide ou non. En particulier, si optarg est la chaine vide, c'est qu'il n'y a pas d'argument.

Je n'aipas teste ce que je viens de te dire, mais je suis quasi sur que ca marche.

A plus.

Poste le Monday 19 April 2004 14:53:44
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Problème avec getopt
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons