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?
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.