main parameter



  • Tach,

    Ich möchte die main Funktion mit Parametern starten lassen. -a und -rm stehen zur Verfügung:

    if (argv[1] == "-rm" || argv[1] == "-remove")
    	{
    		delEntry();
    	}
    
    	else 
    	{
    		cout << "Usage:" << endl<< endl<<"-rm: remove entry"<<endl<<"-a: add entry"<<endl<<endl ;
    		cout << argv[1] << endl;
    	}
    

    Dummerweise wird immer der elseblock abgearbeitet, nicht die if Anweisung. Auch wenn die Paramter stimmen. Woran mag das wohl liegen?



  • Das liegt daran, dass du Zeiger vergleichst und nicht Strings. Bei

    argv[1] == "-rm"
    

    ist argv[1] vom Typ char* , und das Stringliteral "-rm" kann implizit zu const char* konvertiert werden. Folglich vergleichst du char* und const char* , also die Adressen.

    Verwende strcmp() , nachzulesen auf www.cplusplus.com.

    Edit: Blöder Formulierungsfehler.



  • Ich danke dir.



  • ahso, sollte die If-anweisung nicht etwa so aussehen ?
    if ((argv[1] == "-rm") || (argv[1] == "-remove")) // ...



  • lk schrieb:

    ahso, sollte die If-anweisung nicht etwa so aussehen ?
    if ((argv[1] == "-rm") || (argv[1] == "-remove")) // ...

    Nö, wegen den Anführungszeichen brauchst man noch ein zusätzliches Klämmerchen um die Vergleiche 🙄



  • Nexus hat doch bereits geschrieben, dass du dafür strcmp benutzten musst..



  • Hi,

    also ich habe mir angewöhnt, jedesmal die main-Parameter gleich in einen vector<string> zu packen ... ist auch nur ein Einzeiler und viel leichter zu handhaben.

    int main(int argc, char* argv[]) {
       vector<string> args(&argv[0], &argv[argc]);
       ...
    

    (schnell hingeschrubbte Variante ... noch nicht "off-by-one"-fest)

    Gruß,

    Simon2.


Anmelden zum Antworten