I am trying to get options via getopt.
I`ve run the program via the command line:
test.exe -ja 1:2 -ja 3:4
My code have following:
int c;
while ((c = getopt (argc, argv, "j:")) != -1) {
switch (c) {
case 'j': {
printf("Find j\n");
if (optarg[0] == 'a') {
printf("Find a\n");
}
break;
}
}
}
The problem is that case 'j' triggered only once, not twice. What should i change to read every -ja option?
CodePudding user response:
From the man page:
If there are no more option characters, getopt() returns -1.
When you pass test.exe -ja 1:2 -ja 3:4, you are passing multiple option elements (a and 1:2) to a single option j. As they are not quoted, getopt() finds option j and sets optarg to point at a, the first character of the option element.
It then finds 1:2 which is not an option and returns -1.
Quote your arguments like test.exe -j "a 1:2" -j "a 3:4" and it's triggered twice:
test.exe -j "a 1:2" -j "a 3:4"
Find j
Find a
Find j
Find a
