È possibile passare all'indietro attraverso una lista di argomenti GetOPT_Long?

StackOverflow https://stackoverflow.com/questions/3263971

  •  16-09-2020
  •  | 
  •  

Domanda

Vorrei delegare a uno dei numerosi elenchi possibili di argomenti in base a se sono presenti particolari argomenti, lungo le linee di:

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid
.

E il modo migliore in cui posso pensare di farlo ordinatamente è quello di avere main() elaborare tutte le opzioni comuni e decidere quale di diverse funzioni per chiamare per elaborare il resto.

Nota che non voglio limitare l'ordine in modo che le opzioni comuni possano essere solo prima.

Il mio problema è che se ripristinato optind a 1 prima di analizzare gli argomenti per una seconda volta, getopt_long Segfaults passando una stringa non valida a strncmp - quindi credo che non dovrei scherzare con Optind.

Ho avuto un Google e non riesci a trovare alcun riferimento sul fatto che sia possibile saltare attorno all'elenco Argoment getopt_long (so che è possibile per getopt), se lo è, come lo faccio? < / P >.

Preferirei non utilizzare alcuna biblioteca non standard. (La lingua è normale c, no c ++ per favore)

È stato utile?

Soluzione

Il mio problema è stato che non avevo impostato l'ultima riga del mio array static struct option long_options[] su Zeros, impostare questo correttamente corregge l'errore.

Gnu Getopt richiede anche optind da ripristinare a 0 non 1 per ripristinare correttamente il proprio stato interno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top