Qualcuno può aiutarmi con la funzione getopt?- getopt
Quando faccio presente quanto segue principale:
char *argv1[] = {"testexec","-?"};
char *argv2[] = {"testexec","-m","arg1"};
int cOption;
/* test for -? */
setvbuf(stdout,(char*)NULL,_IONBF,0);
printf("\n argv1 ");
while ((cOption = getopt (2, argv1, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg ");
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}
printf("\n argv2 ");
while ((cOption = getopt (3, argv2, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg : %s \n",optarg);
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}
Io corro questo codice su RHEL3 che utilizza vecchia versione libc. Non so quale sia per essere esatto.
Ora il problema è getopt non funziona la seconda volta con argv2. Ma se commento la prima chiamata getopt con argv1, funziona.
Qualcuno può dirmi cosa sto sbagliando qui?
Buona risposta, ma mentre questo è certamente vero, ho provato a cambiarlo nel codice di esempio e non è stato risolto il particolare problema che veniva posto. –
David, hai ragione. Ho appena individuato quell'errore e ho dimenticato il resto :) Ho modificato la risposta, poiché ho notato che se aggiorni il valore optind a 1, il codice funziona come previsto. Cordiali saluti –
Attenzione: lo standard POSIX non stabilisce che il reset di optind a 1 resetterà getopt() allo stato iniziale, specialmente se non sono stati analizzati completamente i primi argomenti. Ad esempio, se il primo argomento è -xy e ti fermi dopo aver elaborato x, non c'è alcuna garanzia che un reset di optind funzioni. –