2010-07-29 34 views
7

Estoy tratando de comparar el parámetro de comando con argv [] pero no está funcionando. Aquí está mi código.Comparar el parámetro de comando con argv [] no funciona

./a.out -d 1 

En función principal

int main (int argc, char * const argv[]) { 

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

    // call some function here 

} 

Pero esto no funciona ... No sé por qué esta comparación no está funcionando.

+0

Véase mi respuesta aquí: http: // stackoverflow .com/questions/3303164/why-isnt-if-maya-maya-true-in-c/3303176 # 3303176 –

Respuesta

23

No puede comparar cadenas usando ==. En su lugar, use strcmp.

#include <string.h> 

int main (int argc, char * const argv[]) { 

if (strcmp(argv[1], "-d") == 0) 

// call some function here 

} 

La razón de esto es que el valor de "..." es un puntero que representa la posición del primer carácter de la cadena, con el resto de los personajes después de ella. Cuando especifica "-d" en su código, crea una cadena completamente nueva en la memoria. Dado que la ubicación de la nueva cadena y argv[1] no son las mismas, == devolverá 0.

+1

Es posible que desee mencionar que la razón por la cual las cadenas de C no se pueden comparar es porque no compara el contenido, solo los punteros. –

+0

o si sabes que tus args son letras sueltas (argv [1] [1] == 'd') –

+0

@Cristian: he editado, gracias por señalar eso. – Adrian

-4

voluntad no ser que:

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

no 01?

+0

No, porque el primer elemento de 'argv' es el nombre del programa. – Adrian

+1

no, C y C++ tienen char [] para cadenas de caracteres como esta; se convierte en una comparación de puntero –

+1

Nop. Primero, estás comparando direcciones, no contenido. En segundo lugar, argv [0] es la ruta del comando. – ninjalj

2

Es posible que desee utilizar strcmp aquí.

9

En C++ dejar que std :: string haga el trabajo por usted:

#include <string> 
int main (int argc, char * const argv[]) { 

if (argv[1] == std::string("-d")) 

// call some function here 

} 

En C que tendrá que utilizar strcmp:

if (strcmp(argv[1], "-d") == 0) 

// call some function here 

} 
Cuestiones relacionadas