[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] [devel] getopt()
Merci,
En fait, l'explication du pourquoi des arguments est ok. Donc, je comprends
leur utilite et comment les utiliser.
Ma question etait mal posee. Ce qui me preoccupe est le pourquoi de
l'utilisation de "const". et surtout l'interpretation de "char *const *argv".
Il s'agit plutot d'une question theorique sur les pointeurs ... j'ai encore
du mal avec cette notion.
Je vois ca comme suit :
argv : contient une adresse.
*argv : est l'adresse contenue dans argv.
**argv : est le caractere pointe par l'adresse contenue dans argv.
Mais quelle adresse est constante (car il y a "const" dans l'expression) ?
Philippe
Le Samedi 30 Juin 2001 18:01, Benjamin Michotte a écrit :
> On Sat, Jun 30, 2001 at 05:38:39PM +0200, CHARLIER Philippe wrote:
> > Salut,
> >
> > Autre petit probleme de comprehension :
> >
> > Le prototype de la fonction "getopt()" est le suivant :
> >
> > int getopt(int argc, char *const *argv, const char *optstring);
> >
> > Mon probleme vient de l'utilisation des "const". Je suppose que le but
> > est dans le troisieme argument de pointer vers une constante caractere.
> >
> > Par contre dans le deuxieme argument, je vois les choses comme suit :
> >
> > *argv est un pointeur "constant" vers un caractere.
> > argv est un pointeur vers "un pointeur constant vers un caractere".
>
> en fait, argc est le nombre d'arguments de ton prog,
> argv les arguments (argv[0], argv[1], ...)
> optstring est une chaine de caracteres avec les options que ton prog
> peut accepter.
>
> genre
>
> int main(int argc, char *argv[])
> {
> char *liste_opt = "abc";
> int nbe_opt;
>
> opterr = 0; // n'affiche pas les messages d'erreurs automatiquement
>
> while((nbe_opt = getopt(argc, argv, liste_opt)) != -1)
> {
> switch(nbe_opt)
> {
> case 'a':
> fprintf(stdout, "option a\n");
> break;
> case 'b':
> fprintf(stdout, "option b\n");
> break;
> case 'c':
> fprintf(stdout, "option c\n");
> break;
> case '?':
> fprintf(stderr, "option %c inconnue\n", optopt);
> break;
> }
> }
> if(optind != argc)
> {
> fprintf(stdout, "arguments restants : ");
> while(optind != argc)
> fprintf(stdout, "%s ", argv[optind++]);
> }
>
> return 0;
> }
>
> > Me trompe-je ?
> >
> > Philippe
> >
> > [ Soyez précis dans vos sujets svp afin de déterminer directement ]
> > [ le type de demande... ]
> > [ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
> > [ http://LinuxBe.org Contact: listmaster@linuxbe.org ]
>
> ---end quoted text---
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
[ http://LinuxBe.org Contact: listmaster@linuxbe.org ]