CMouse
CMouse

Reputation: 130

Getting command line options

I want to parse the command line options having specific format for getting the values. The function is as follows

char* getCmdOption(char** begin,
                    char** end,
                    const std::string& option)
{
   char** itr = std::find(begin, end, option);

  if (itr != end && ++itr != end)
  {
        return *itr;
  }
  return (char*)"";
}

The arguments passed are getCmdOption(argv, argv+argc, "--optionName") The code works fine for all the options and gives proper output but if I want to give values such as Application.exe --optionName surname="O Kief" the code should return me surname="O Kief" but instead it returns "surname=O Keif"

The format for input is Application.exe --optionName optionValue and expected output is "optionValue"

What is possibly wrong with the logic ? And how can i handle the case I have mentioned ?

Upvotes: 3

Views: 413

Answers (1)

CocoCrisp
CocoCrisp

Reputation: 815

""is the only way to get the command interpreter (cmd.exe) to treat the whole double-quoted string as a single argument. Sadly, however, not only are the enclosing double-quotes retained (as usual) but so are the doubled escaped ones, so obtaining the intended string is a two-step process; e.g., assuming that the double-quoted string is passed as the 1st argument.

Application.exe --optionName option="name" removes the enclosing double-quotes then converts the doubled double-quotes to single ones. Be sure to use the enclosing double-quotes around the assignment parts to prevent unwanted interpretation of the values.

Although a precise solution is given below but you can visit this for in-depth solution of the problem (Not exactly a problem)

If the optionValue does not contain white spaces keep the format as

Application.exe --optionName "optionValue"

If the option Value contains white space wrap the thing in quote as

 Application.exe --optionName '"option Value"'

Upvotes: 2

Related Questions