c - getopt not working correctly when run from unix command line -
i wrote (copied , pasted google , simplified) c program use getopt print out values of arguments passed in unix command line.
from unix command line:
./myprog -a 0 -b 1 -c 2
my c code is:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int i; while ((i = getopt(argc, argv, "abc")) != -1) { switch (i) { case 'a': printf("a = %s\n", optarg); break; case 'b': printf("b = %s\n", optarg); break; case 'c': printf("c = %s\n", optarg); break; default: break; } } return 0; }
i want program print out each of values passed e.g.
a = 0 b = 1 c = 2
however not printing out @ all.
you forget ":" after option argument. if change 1 line
while ((i = getopt(argc, argv, "a:b:c:")) != -1) {
you working variant.
read man 3 getopt
, said third argument of getopt
… optstring string containing legitimate option characters. if such character followed colon, option requires argument, getopt() places pointer following text in same argv-element, or text of following argv-element, in optarg. 2 colons mean option takes optional arg; if there text in current argv-element (i.e., in same word option name itself, example, "-oarg"), returned in optarg, otherwise optarg set zero. …