È possibile passare all'indietro attraverso una lista di argomenti GetOPT_Long?
-
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)
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.