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)
{
...codeso 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
)