问题
I'm trying to scan the command line for certain letters, symbols and values. I want to scan for "-w"
, a number, and "-s"
. I got a response in my last question, I was told to use getopt()
and after a little bit of Googling, I think I might get it, but I'm not sure.
This is what I think I'm doing:
int c = 0;
int b = argv[2];
while((c = getopt(argc, argv, "-w", "-s", b))
I think I'm scanning argc
for "-w"
, "-s"
and the argv[2]
value (which is the number). But I do not know if I am using it correctly?
回答1:
Your while loop should be
while ((c = getopt(argc, argv, "w:s:"))
:
the colon means it needs an argument. now convert optarg
to an integer or whatever you wanted.
回答2:
int number = 0;
int sflag = 0;
int opt;
while ((opt = getopt(argc, argv, "w:s")) != -1)
{
switch (opt)
{
case 's':
sflag = 1;
break;
case 'w':
number = atoi(optarg);
break;
default:
/* Report usage and exit? */
break;
}
}
The conversion on the number is lazy; you can do more a more careful job calling a function that calls strtol()
, for instance. You might need to have a wflag
variable that you set analogously to the sflag
variable so that you can distinguish -w 0
from 'no -w
option specified on the command line'.
来源:https://stackoverflow.com/questions/13767888/am-i-understanding-getopt-correctly