Can't compare argv?

Kristina Brooks picture Kristina Brooks · Nov 21, 2010 · Viewed 14.6k times · Source

I have this code:

if (argv[i] == "-n") 
{
    wait = atoi(argv[i + 1]);
}
else 
{
    printf("bad argument '%s'\n",argv[i]);
    exit(0);
}

When this code gets executed I get the following error:

bad argument '-n'

I seriously don't know why it does that. Can someone explain?

Answer

Jonathan Leffler picture Jonathan Leffler · Nov 21, 2010

String comparisons need a function in C - usually strcmp() from <string.h>.

if (strcmp(argv[i], "-n") == 0) 
{
    wait = atoi(argv[i + 1]);
}
else 
{
    printf("bad argument '%s'\n",argv[i]);
    exit(0);
}

The strcmp() function returns a negative value (not necessarily -1) if the first argument sorts before the second; a positive value (not necessarily +1) if the first arguments sorts after the second; and zero if the two values are equal.