2017-02-19 2 views
2

Dies ist C++Wie ein Element von argv []

An den Fenstern cmd Linie Benutzertypen

p3.exe X <data.txt 

wo "p3.exe" ist der Name des Programms erhalten,

„X "wird eine 1, 2 oder 3,

und" data.txt "ist ein Text-Programm für die Eingabe verwendet.

Innerhalb der Hauptmethode erwarte ich, dass argv [1] der Zeichenfolge X entspricht, die an der cmd-Zeile eingegeben wurde. In der Tat, wenn ich

wcout << argv[1] 

tun die Ausgabe ist "X" wie erwartet.

So, jetzt kann ich dies tun,

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

Aber (argv [1] == "X") wertet nie wahr

Was ich Verständnis fehlte oder nicht?

+0

Und welcher Wert wird in 'argv [1]' gespeichert? Haben Sie versucht, einen Debugger zu verwenden, um durch Ihren Code zu gehen, um das herauszufinden? –

+0

@ AlgirdasPreidžius Die Frage sagt, dass OP getan hat. – interjay

+0

@interjay Oh, habe nicht gemerkt, dass:/Wahrscheinlich übersprang die Frage zu schnell:/ –

Antwort

4

Sie können C-style Zeichenfolgen (char *) nicht mit == vergleichen, da es nur den Zeiger und nicht die angegebene Zeichenfolge vergleicht.

können Sie entweder strcmp:

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

oder stellen Sie sicher, zumindest eine Seite des Vergleichs ist eine C++ string:

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

Beide funktionieren perfekt. Die zweite Antwort funktioniert also, indem man den argv [1] -Zeiger auf eine Zeichenkette "wirft". – greg

+0

Ja, es kopiert die C-Zeichenfolge in ein temporäres std :: string-Objekt, das für den Vergleich verwendet wird. Wenn Sie 'argv [1] 'mit mehreren Werten vergleichen möchten, können Sie die Zeichenfolge in einer separaten Zeile erstellen und dann mit jedem Wert vergleichen. – interjay

0

Verwendung if(strcmp(argv[1],"X")==0) .... Sollte das Problem lösen.