getopt() is not behaving as I expect for short options.
eg: Invoking the below program with a missing parameter:
Valid Case: testopt -d dir -a action -b build
Error Case: testopt -d -a action -b build
This did not throw any error as I was expecting an error message operand missing for -d
- Is this a known bug?
- If so, is there any standard fix available?
My code:
#include <unistd.h> /* testopt.c */ /* Test program for testing getopt */ int main(int argc, char **argv) { int chr; while ( ( chr = getopt(argc, argv, ':d:a:b:') ) != -1 ) { switch(chr) { case 'a': printf('Got a...\n'); break; case 'b': printf('Got b...\n'); break; case 'd': printf('Got d...\n'); break; case ':': printf('Missing operand for %c\n', optopt); break; case '?': printf('Unknown option %c\n', optopt); break; } } printf('execution over\n'); return 0; }
getopt()thinks-ais an argument for-d, not an option.Try
testopt -a action -b build -d– it should complain about missing argument.You need to check for
-doption (and all other options) thatoptarghas valid value – the one without dash in the beginning.