2010-07-29 17 views
7

Sto provando a confrontare il parametro di comando con argv [] ma non funziona. Ecco il mio codice.Il confronto del parametro di comando con argv [] non funziona

./a.out -d 1 

In funzione principale

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

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

    // call some function here 

} 

Ma questo non funziona ... non so il motivo per cui questo confronto non sta funzionando.

+0

Vedere la mia risposta qui: http: // StackOverflow .com/questions/3303164/why-isnt-if-maya-maya-true-in-c/3303176 # 3303176 –

risposta

23

Non è possibile confrontare le stringhe utilizzando ==. Utilizzare invece strcmp.

#include <string.h> 

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

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

// call some function here 

} 

La ragione di questo è che il valore di "..." è un puntatore che rappresenta la posizione del primo carattere della stringa, con il resto dei caratteri dopo di esso. Quando si specifica "-d" nel codice, viene creata una nuova stringa intera in memoria. Poiché la posizione della nuova stringa e argv[1] non corrispondono, == restituirà 0.

+1

Si potrebbe voler dire che il motivo per cui le stringhe C non possono essere confrontate è perché non confronta i contenuti, solo i puntatori. –

+0

o se sai che i tuoi argomenti sono lettere singole (argv [1] [1] == 'd') –

+0

@Cristian: ho modificato, grazie per averlo indicato. – Adrian

-4

non sarà che essere:

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

non 01?

+0

No, perché il primo elemento di 'argv' è il nome del programma. – Adrian

+1

no, C e C++ hanno char [] per stringhe di caratteri come questa; si trasforma in un confronto puntatore –

+1

Nop. Innanzitutto, stai confrontando gli indirizzi, non i contenuti. Secondo, argv [0] è il percorso del comando. – ninjalj

2

Si consiglia di utilizzare strcmp qui.

9

In C++ lasciare std :: string fare il lavoro per voi:

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

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

// call some function here 

} 

In C dovrete usare strcmp:

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

// call some function here 

} 
Problemi correlati