2017-02-19 2 views
2

C'est C++Comment obtenir un élément de argv []

Aux fenêtres ligne cmd types d'utilisateurs

p3.exe X <data.txt 

où "p3.exe" est le nom du programme,

« X "sera 1, 2 ou 3,

et « data.txt » est un certain programme de fichier texte utilise pour l'entrée. À l'intérieur de la méthode principale, j'attends argv [1] pour égaler la chaîne X typée à la ligne cmd. En fait, si je le fais

wcout << argv[1] 

la sortie est "X" comme prévu.

Alors maintenant, je le fais,

int main(int argc, char* argv[]) 
{ 
    if (argc > 1) 
    { 
      if (argv[1] == "X") 
      { 
       //do stuff 
      } 
    } 
    return 0; 
} // end main 

Mais (argv [1] == "X") évalue jamais vrai

Qu'est-ce que je manque ou ne pas comprendre?

+0

Et quelle valeur est stockée dans 'argv [1]'? Avez-vous essayé d'utiliser un débogueur pour parcourir votre code, pour le découvrir? –

+0

@ AlgirdasPreidžius La question dit que OP a fait. – interjay

+0

@interjay Oh, n'a pas remarqué que:/Probablement écrémé la question rapide:/ –

Répondre

4

Vous ne pouvez pas comparer les chaînes de style C (char *) avec == car elles ne font que comparer le pointeur et non la chaîne pointée.

Vous pouvez utiliser strcmp:

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

ou assurez-vous au moins un côté de la comparaison est une chaîne C++:

if (std::string(argv[1]) == "X") 
+0

Les deux fonctionnent parfaitement. Donc la 2ème réponse fonctionne en "castant" le pointeur argv [1] à une chaîne? – greg

+0

Oui, il copie la chaîne C dans un objet std :: string temporaire, qui est utilisé pour effectuer la comparaison. Si vous voulez comparer 'argv [1]' avec plusieurs valeurs, vous pouvez créer la chaîne sur une ligne distincte, puis la comparer avec chaque valeur. – interjay

0

Utilisez if(strcmp(argv[1],"X")==0) .... Devrait résoudre le problème.