Parameter auswerten
-
Beides richtig (falls überhaupt behauptet wurde, dass der Beitrag von KPC, oder der von Corrector falsch ist).
char* untereinander mit operator== zu vergleichen macht hier keinen Sinn.
Statt dessen nimmt man strstr(). (siehe Beispiel)
Oder man benutzt einfach den std::string mit seinem überladenen (friend?) operator== (wie in Correctors Beispielen).if( strstr(argv[1],"passt") == argv[1] ) cout << "es passt!";// edit:
halt, unsinn.
Correctors erstes Beispiel ist natürlich falsch, schließlich kommen dort keine std::strings vor (obwohl er in der Beschreibung ankündigt nen string zu gebrauchen).
-
Corrector schrieb:
Edit:
Natürlich geht das auch mit einfachen char*#include <iostream> #include <string> using namespace std; int main() { string staun("Aha, das geht ja doch !!!"); char *gucke_mal = "Aha, das geht ja doch !!!"; if ( gucke_mal == staun ) cout << "Ahaaa, ohooo" << endl; return 0; }Das ist aber auch kein Vergleich von 2 char*, sondern von 2 std::string Objekten, da "gucke_mal" implizit in einen std::string umgewandelt wird. Wollte das nur nochmal klarstellen, weil das in deinem ersten Beispiel nicht so raus kam.
-
wandrer schrieb:
...
Correctors erstes Beispiel ist natürlich falsch, schließlich kommen dort keine std::strings vor (obwohl er in der Beschreibung ankündigt nen string zu gebrauchen).
...#include <iostream> using namespace std; int main() { char *str = "Ist ist hier falsch ?"; if ( str != "Ist ist hier falsch ?" ) cout << "Ja, ist was falsch :-(" << endl; else cout << "Alles tutti frutti hier :-)" << endl; return 0; }
-
Corrector schrieb:
wandrer schrieb:
...
Correctors erstes Beispiel ist natürlich falsch, schließlich kommen dort keine std::strings vor (obwohl er in der Beschreibung ankündigt nen string zu gebrauchen).
...#include <iostream> using namespace std; int main() { char *str = "Ist ist hier falsch ?"; if ( str != "Ist ist hier falsch ?" ) cout << "Ja, ist was falsch :-(" << endl; else cout << "Alles tutti frutti hier :-)" << endl; return 0; }Erneutes Posten macht es nicht richtiger.. Du verlgeichst da lediglich die adressen der beiden Strings - setz dich bitte mal mit Zeigern auseinander bevor du weiter Unsinn verbreitest

-
asdfsmdf schrieb:
Erneutes Posten macht es nicht richtiger.. Du verlgeichst da lediglich die adressen der beiden Strings - setz dich bitte mal mit Zeigern auseinander bevor du weiter Unsinn verbreitest

-
Wenn hier "Alles tutti frutti hier :-)" rauskommt, dann liegt das lediglich an der Implementierung des Compilers. Der hat sich nämlich dann entschieden zwei gleiche String-literale in den selben Speicherbereich zu packen. Das darf er, muss er aber nicht, dadurch wird das vergleichen von zwei char* aber immer noch nicht richtiger...
C++ Final Draft schrieb:
-2- Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementation-defined. The effect of attempting to modify a string literal is undefined.
-
Der Aufklärer schrieb:
EDIT:
Kürzestmöglicher Gegenbeweis BTW:#include <iostream> using namespace std; int main() { char the_real_storage[] = "Ist ist hier falsch ?"; char* str = the_real_storage; if ( str != "Ist ist hier falsch ?" ) cout << "Ja, ist was falsch :-(" << endl; else cout << "Alles tutti frutti hier :-)" << endl; return 0; }
-
Ich ziehe daraus einfach mal ein Fazit: Programmparameter in einem If-Vergleichen ist ohne weiteres nicht möglich, da es sich dabei um einen Pointer handelt. Korrekt?
Nun denn. Ich wollte nicht unbedingt auf die Lösung mit dem switch () hinaus, da es sich ja so oder so herausstellte, dass es nur Integer-Typen annimmt. Also habe ich es mit If versucht. Das was mich nur so verwundert, dass genau die Variablen, die ich verglichen habe, die richtigen Ausgaben mit cout geliefert haben, aber If es nicht richtig verglichen hat.
Dann habe ich hier gelesen, ich solle doch strstr () einmal versuchen. Okay, aber es sucht das erste vorkommen. Man kommt zwar auch zum Ziel, aber zum Vergleichen gibt es doch extra die Funktion strcmp ()? Die habe ich also verwendet und es funktioniert wunderbar. Hier der Code:#include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]) { if (strcmp (argv[1], "a") == 0) cout << "Ahaaa, ohooo" << endl; return 0; }Vielen Dank.

-
Nite schrieb:
Man kommt zwar auch zum Ziel, aber zum Vergleichen gibt es doch extra die Funktion strcmp ()? Die habe ich also verwendet und es funktioniert wunderbar.
Sorry, das ist alles Mist. klar, 'strcmp' funktioniert unter gewissen Rahmenbedingungen aber dies hier ist ein C++-Forum und da gibt es keinen Grund, künstliche Probleme zu schaffen und auf den C++-Komfort zu verzichten. Fazit: Vergiss 'strcmp' und 'strstr' und verwende 'std::string' und '='.
-
Ich verstehe nicht recht. Ich habe es doch mit Strings versucht und es hat doch nicht geklappt?!

#include <iostream> #include <string> int main (int argc, char* argv[]) { string str = "hallo"; if (argv[1] == str) cout << "Funktioniert" << endl; return 0; }Oder habe ich da was falsch verstanden?

-
Nite schrieb:
Ich verstehe nicht recht. Ich habe es doch mit Strings versucht und es hat doch nicht geklappt?!

#include <iostream> #include <string> int main (int argc, char* argv[]) { string str = "hallo"; if (argv[1] == str) cout << "Funktioniert" << endl; return 0; }Oder habe ich da was falsch verstanden?

So wie das da steht, müsste das eigentlich funktionieren.
KPC hat das ja schon geschrieben:
argv[1] wird intern in einen string umgewandelt und somit wird dann auch ein "hallo" in argv[1] erkannt.Natürlich nur dann, wenn du es beim Programmstart in der Konsole eingibst
