Search code examples
c++command-lineargvargc

Change a command line argument argv


I would like to modify or erase a command-line argument in argv.

//Somewhere near the top of main()

bool itemFound(false);
for(int i=1; i<argc; ++i) {
  if(argv[i] == "--item") {
    itemFound = true;
    //And remove this item from the list
    argv[i] = "      ";   //Try to remove be just inserting spaces over the arg
  }
}

//Now, use argc/argv as normal, knowing that --item is not in there

However, --item is still contained in the list.

What's the best way to do this?


Solution

  • Did you try debugging? If you do, you will see that it never attempts to erase anything. You can't compare strings (char*) with simple equality, because in reality you're comparing pointers, which will (almost) never be equal. Instead, you should use string comparison functions, like this:

    if (!strcmp(argv[i], "--item")) {
    

    Also, since you're overwriting the argument, you don't need to use a lot of spaces, you can simply set it to an empty string (argv[i] = ""), or modify the existing string to make it empty (argv[i][0] = 0). Alternatively, you could shift the rest of the arguments so you don't end up with gaps which could confuse the rest of your code.