Eigentlich hatte ich die Funktion getopt() schon längere Zeit ohne Probleme genutzt. Aber jetzt gibt es plötzlich Probleme. Hier mal das entsprechende Code Fragment:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ... while ((c = getopt( argc, argv, "iasv:hn" )) != -1) { switch (c) { case 'i': printf( "%s\n", version ); exit( 0 ); case 'a': filter_flag = 0; break; case 's': want_stat = 0; break; case 'v': verbose = atoi( optarg ); break; case 'n': no_action = 1; break; case 'h': printf( " %s %s\n", argv[0], version ); help(); break; case '?': fprintf( stderr, "Unrecognized option \n"); break; default: fprintf( stderr, "invalid option\n\n" ); help(); exit( -3 ); } } ... |
Die zugehörige Eingabezeile ist:
$ ./edcom -a -v -n img_filter2.txt test
Hinter dem Parameter "v" sollte eigentlich eine Zahl stehen. Durch dessen Fehlen (Userfehler) tritt das Problem auf. Der nachfolgende Parameter "-n" (für no action) wird dann nicht mehr bearbeitet, was in diesem Fall zu fehlerhaftem Verhalten führt.
Ich verstehe aber nicht, warum dann die Datei "img_filter2.txt" und die nachfolgende Verzeichnisangabe "test" trotzdem abgearbeitet werden (aber leider mit falschen Einstellungen).
Es funktioniert nur, wenn die geforderte Zahl ohne Abstand eingegeben wird.
Daher meine Frage: Wie könnte ich erkennen, das die Eingabe fehlerhaft ist? Oder ist diese Funktion generell nicht empfehlenswert.
p.s: Die "default" Zeile hatte ich erst nach studieren des Beispiels in den man pages hinzugefügt, was aber nichts geändert hat.