Frage

Ich möchte an eine von mehreren möglichen Argumentlisten delegieren, je nachdem, ob bestimmte Argumente vorliegen, nach dem Vorbild von:

./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

Und der beste Weg, den ich mir vorstellen kann, um das ordentlich zu machen, ist zu haben main() verarbeiten Sie alle gängigen Optionen und entscheiden Sie, welche von mehreren Funktionen aufgerufen werden soll, um den Rest zu verarbeiten.

Beachten Sie, dass ich die Reihenfolge nicht einschränken möchte, damit allgemeine Optionen nur zuerst auftreten können.

Mein Problem ist, dass wenn ich zurücksetze optind auf 1, bevor die Argumente ein zweites Mal analysiert werden, getopt_long segfaults durch Übergabe einer ungültigen Zeichenfolge an strncmp - also denke ich, ich sollte mich nicht mit Optind anlegen.

Ich hatte ein Google und kann keinen Hinweis darauf finden, ob es möglich ist, um das herumzuspringen getopt_long argumentliste (ich weiß, dass es möglich ist für getopt), wenn ja, wie mache ich das?

Ich würde es vorziehen, keine nicht standardmäßigen Bibliotheken zu verwenden.(Sprache ist einfaches c, bitte kein c ++)

War es hilfreich?

Lösung

Mein Problem war, dass ich die letzte Zeile meines nicht eingestellt hatte static struct option long_options[] array auf Nullen, wenn Sie dies richtig einstellen, wird der Fehler behoben.

GNU getopt erfordert auch optind auf 0 und nicht auf 1 zurückgesetzt werden, um den internen Zustand korrekt zurückzusetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top