itsaboutcode
itsaboutcode

Reputation: 25099

Comparing command parameter with argv[] is not working

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

Answers (4)

Viper_Sb
Viper_Sb

Reputation: 1817

won't that be:

if (argv[0] == "-d")

0 not 1?

Upvotes: -4

Mark B
Mark B

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

Brandon Horsley
Brandon Horsley

Reputation: 8104

You may want to use strcmp here.

Upvotes: 2

Adrian
Adrian

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

Related Questions