29

I'm not sure how to correctly use optstring in the getopt function in C.

How should that string be formatted? I saw examples where letters are next to each other, sometimes separated by a semicolon, sometimes by two semicolons.

What does it mean?

3 Answers 3

39

It is just a string, and each character of this string represents an option. If this option requires an argument, you have to follow the option character by :.

For example, "cdf:g" accepts the options c, d, f, and g; f requires an additional argument.

An option in command line looks like -option, so you can use the options -c, -d, -f argument and -g.

3
  • And then in command line options have dash and are separated with space? And if some option is with : then in command line the following typed input after space is taken as argument?
    – bLAZ
    Commented Nov 6, 2012 at 13:11
  • Now I understand it:) Thank you!
    – bLAZ
    Commented Nov 6, 2012 at 13:15
  • 3
    When the option has an argument, the value is found in the (global) variable optarg that's declared in the header where getopt() is declared (<unistd.h>). Two colons is an extension that indicates the following argument is optional. Commented Nov 6, 2012 at 14:40
13

The getopt(3) manpage makes it pretty clear :

  • the string itself is used for specifying the legal options that can appear on the commandline,
  • if the option is followed by a :, then that option has a required parameter - not specifying it will cause the function to fail,
  • if the option is followed by a ::, then that option has an optional parameter.

The options are one-letter identifiers. For example, specifying a string like aB:cD:: as the optstring will mean that your program takes options a, B with a required parameter, c, and D with an optional parameter.

4

If colon :is followed by a char or string means this option must require the argument and if there are no colon means no arguments

for more details do man 3 getopt or visit the link or manpage

2
  • 5
    It should be if a character is followed by :.?
    – sjsam
    Commented Jul 11, 2016 at 16:01
  • According to getopt manual: "The argument optstring is a string of recognized option characters; if a character is followed by a colon, the option takes an argument."
    – aurelia
    Commented Sep 5, 2021 at 16:03

Not the answer you're looking for? Browse other questions tagged or ask your own question.