werteübergabe



  • wenn ich über die cmd mein programm starte mit den werten:

    programmname variable

    dann speichert mein programm diese so ab:

    char *programmname = argv[0];
    char *variable = argv[1];

    diese haben jetzt den wert des eingegebenen (geprüft mit ausgabe auf dem bildschirm)

    nun möchte ich diese parameter in einer if-anweisung mit einem string vergleichen, um eine passwortabfrage zu erstellen. nur das funktioniert irgendwie nicht da bei einer anweisung wie dieser:

    if ( programmname == "programm")
    {
    }

    dies schleife (nach meiner sicht) übersprungen wird.

    bitte um hilfe für diese if anweisung oder eine alternative...

    danke

    bauchklatscher





  • oh nein ich habe auch schleife geschrieben 🙄

    naja noch eine frage:

    nach dem ich so verglichen habe:

    char *variable = argv[1];
    string a = "variable";

    if(std::strcmp(variable,a)==0)
    ...

    fehler:

    cannot convert `std::string' to `const char*' for argument `2' to `int std::strcmp(const



  • string a = argv[1];
    
    if (a.length())
      ...
    


  • ich habe nie gesagt, dass der vergleich mit dem eingegebenen stattfindet...

    es gibt die variablen

    char *variable = argv[1];
    string a = "variable";

    so wie es hier steht.



  • Ach, Anführungszeichen überlesen - benutz doch bitte den C++-Syntaxhighlighter 🙄

    std::string a = argv[0];
    std::string b = "variable";
    
    if (a == b)
      ...
    


  • das ist mein problem... es muss ein pointer sein. wenn es keiner ist, bekomm ich stress mit einer funktion in locale.h



  • Etwas mehr Infos bitte zum Problem mit der locale.h.

    Es gibt keine Probleme - es gibt nur Herausforderungen 🙂



  • syntax error before `{' token

    Diese fehlermeldung verzweigt in die locale.h

    zu der stelle:

    struct lconv
    {
    char* decimal_point;
    char* thousands_sep;
    char* grouping;
    char* int_curr_symbol;
    char* currency_symbol;
    char* mon_decimal_point;
    char* mon_thousands_sep;
    char* mon_grouping;
    char* positive_sign;
    char* negative_sign;
    char int_frac_digits;
    char frac_digits;
    char p_cs_precedes;
    char p_sep_by_space;
    char n_cs_precedes;
    char n_sep_by_space;
    char p_sign_posn;
    char n_sign_posn;
    };

    nun und da ich nur einen vergleich zwischen string und pointer char gesucht habe, wollte ich eigentlich keine normalen strings, weil es anscheinend mit denen nicht so gut funktioniertβ



  • Wenn es möglich ist, solltest du diese Struktur so umbauen, daß sie string's verwendet. Ansonsten bietet die String-Klasse auch die Methoden c_str() (liefert einen const char*, der eventuell später ungültig werden könnte) und copy() (überträgt den String-Inhalt in einen fremden char[]-Block).

    @Vergleich: Entweder du nutzt std::string, dann kannst du per == vergleichen, oder du nutzt char*, dann mußt du strcmp() verwenden.



  • dann löse ich das so:

    char *variable = argv[1];
    char *variable2 = x;

    if(std::strcmp(variable,variable2)==0)
    {
    ...code

    so sollte es funktionieren oder? also eine zuweisung einer neuen char-pointer-vaiable mit einem string, der mir dann die passwortabfrage erlaubt..



  • Wenn x etwas gültiges ist, klar, Du kannst Deine Zeiger so oft herumreichen wie Du willst.

    Was spricht gegen

    if (std::strcmp(argv[1], "Hallo, Passwort") == 0)
    

    ?

    Achja: Und wenn Du meinst Du bekommst durch irgendetwas "Stress" in der locale.h, solltest Du zunächst Verständnis- und Syntaxfehler ausräumen (uns den aktuellen Code zu zeigen kann dabei helfen :p ) anstatt zu schreiben "das geht nicht weil ich dann Stress in der locale.h bekomme". Jedenfalls ist die locale.h da ziemlich sicher nicht dran schuld.



  • #include <iostream>
    using namespace std;
    
    int main(int argc, char ** argv)
    {
        if (std::strcmp(argv[1], "Hallo, Passwort") == 0)
        {
            cout << "du bist drinnen\n";
        }
        cout << "...\n";
        system("PAUSE");
    }
    

    Allso sagen spricht eine satte Windowsmeldung... mit Problembericht und dem so bekannten fenster



  • wie rufst du dein programm auf?



  • wie frage auch antwort sein kann... naja war dumm 🙄

    wie bekomm ich aber bei einem normalen start den fehlerbericht weg, ohne auf andere funktionen (das mit der eingabeaufforderung) zu verzichten?



  • Argc überprüfen, ob argv überhaupt zwei Elemente lang ist z.B. 😉



  • das ist es ja sonst würde es nicht in der eingabeaufforderung funktionieren mit 3 werten...



  • Lass Dir argc einfach mal ausgeben und ruf das Programm mit unterschiedlich vielen Parametern auf...



  • argc liegt bei 1

    argv bei einem wert uf ich gucke mal:

    2x3d2488

    und ich benutze argv



  • Wenn argc 1 ist ist argv aber nur 1 Element lang, d.h. argv[0] ist gültig, argv[1] nicht mehr.

    Und jetzt ruf Dein Programm mal mit einem und mit zwei Parametern in ner Kommandozeile auf (ja muss man denn hier alles vorkauen 🤡 )


Anmelden zum Antworten