Getopt- Passing string parameter for argument

前端 未结 2 1856
隐瞒了意图╮
隐瞒了意图╮ 2020-12-23 18:33

I have a program which takes in multiple command line arguments so I am using getopt. One of my arguments takes in a string as a parameter. Is there anyway to obtain that st

2条回答
  •  猫巷女王i
    2020-12-23 18:48

    Read man getopt http://linux.die.net/man/3/getopt

    optstring is a string containing the legitimate option characters. If such a character is followed by a colon, the option requires an argument, so getopt() places a pointer to the following text in the same argv-element, or the text of the following argv-element, in optarg. Two colons mean an option takes an optional arg; if there is text in the current argv-element (i.e., in the same word as the option name itself, for example, "-oarg"), then it is returned in optarg, otherwise optarg is set to zero.

    A sample code:

    #include 
    #include 
    
    int main (int argc, char *argv[])
    {
      int opt;
      while ((opt = getopt (argc, argv, "i:o:")) != -1)
      {
        switch (opt)
        {
          case 'i':
                    printf ("Input file: \"%s\"\n", optarg);
                    break;
          case 'o':
                    printf ("Output file: \"%s\"\n", optarg);
                    break;
        }
      }
      return 0;
    }
    

    Here in the optstring is "i:o:" the colon ':' character after each character in the string tells that those options will require an argument. You can find argument as a string in the optarg global var. See manual for detail and more examples.

    For more than one character option switches, see the long options getopt_long. Check the manual for examples.

    EDIT in response to the single '-' long options:

    From the man pages

    getopt_long_only() is like getopt_long(), but '-' as well as "--" can indicate a long option. If an option that starts with '-' (not "--") doesn't match a long option, but does match a short option, it is parsed as a short option instead.

    Check the manual and try it.

提交回复
热议问题