2016-06-01 18 views
0

Ich muss nach zwei separaten Dateinamen in einem Befehlszeilenargument suchen.C++ Überprüfen Sie Befehlszeilenargumente

Der folgende Code erzeugt keinen Fehler, wenn die beiden Dateinamen identisch sind.

#include <stdio.h> 
    #include <iostream> 
    #include <stdexcept> 

    using namespace std; 

    int main (int argc, char *argv[]) 
    { 
    try 
    { 
     if (argc != 3 || argv[1] == argv[2]) 
     { 
      throw invalid_argument("Error"); 
     } 
    } 
    catch (invalid_argument &ex) 
    { 
     cout << ex.what() << '\n'; 
    } 
    } 
+1

Sie die Zeigeradressen vergleichen. Sie werden niemals gleich sein. Sie müssen die Zeichen des char-Arrays einzeln vergleichen. Dafür ist 'strcmp' am besten. Was Sie haben, würde funktionieren, wenn sie 'std :: string's wären (wegen Überlastung des Operators), aber nicht' char * '. –

Antwort

5

argv ist eine Zeichenfolge, so dass Sie "==" Operator nicht vergleichen können. Sie verwenden strcmp in string.h

if (argc != 3 || strcmp(argv[1],argv[2])==0) 
    { 
     throw invalid_argument("Error"); 
    } 
1

Diese Linie

argv[1] == argv[2] 

Zeiger vergleicht, nicht die tatsächliche String-Werte

Versuchen

!strcmp(argv[1] , argv[2]) 
+0

Ich fand immer, dass "strcmp" etwas verwirrend ist. Es sieht so aus, als ob du sagst, wenn sie nicht gleich sind, wenn du tatsächlich sagst, dass sie gleich sind. –