Reputation: 25099
I am trying to compare the parameter of command with argv[] but it's not working. Here is my code.
./a.out -d 1
In main function
int main (int argc, char * const argv[]) {
if (argv[1] == "-d")
// call some function here
}
But this is not working... I don't know why this comparison is not working.
Upvotes: 11
Views: 14469
Reputation: 96241
In C++ let std::string do the work for you:
#include <string>
int main (int argc, char * const argv[]) {
if (argv[1] == std::string("-d"))
// call some function here
}
In C you'll have to use strcmp:
if (strcmp(argv[1], "-d") == 0)
// call some function here
}
Upvotes: 14
Reputation: 15171
You can't compare strings using ==
. Instead, use strcmp
.
#include <string.h>
int main (int argc, char * const argv[]) {
if (strcmp(argv[1], "-d") == 0)
// call some function here
}
The reason for this is that the value of "..."
is a pointer representing the location of the first character in the string, with the rest of the characters after it. When you specify "-d"
in your code, it makes a whole new string in memory. Since the location of the new string and argv[1]
aren't the same, ==
will return 0
.
Upvotes: 30