Problem mit strcmp und argv



  • Hallo zusammen,

    ich fange gerade an c zu lernen und bin beim durcharbeiten eines Tutorials auf ein Problem gestoßen.
    ich rufe über das command window ein programm auf:
    programm.exe plus 4.2 5.3

    im code möchte ich prüfen ob das erste Argument der string plus ist, dazu benutze ich strcmp. leider funktioniert das nicht, ich erhallte jedesmal 0 als Ausgabe.
    im code sieht das wie folgt aus:

    printf("%s\n", strcmp(argv[1], "plus"));
    

    argv[1] enthält aufjedenfall den string plus, da beim aufruf von

    printf("%s\n", argv[1]);
    

    erhalte ich in der Ausgabe das wort plus.
    Also was mache ich falsch?
    Hoffe jemand kann mir ein tipp geben

    Viele Grüße
    Ramnad



  • "strcmp" vergleicht zwei strings und gibt eine Zahl zurück, 0 bedeutet dass die strings gleich sind.
    Im übrigen gibt printf mit "%s" einen string aus, für integer solltest du "%d" nehmen.

    Was hast du denn als Ausgabe erwartet/gewollt?



  • Mist, DarkShadow44 war schneller.

    Die Doku von strcmp sagt, dass die Funktion 0 zurück gibt, wenn die beiden Strings ident sind.

    0 -- the contents of both strings are equal



  • asoo
    ok ich habe gedacht 0 bedeutet strings sind nicht gleich (wie z.b. das bei MATLAB der fall ist)
    deshalb habe ich das Programm darauf ausgelegt. Warum gibt es bei eienr aussage das beide Strings gleich sind, also frage ob identisch gleich wahrist, die Ausgabe 0?

    Aber danke aufjedenfall schon mal für die Aufklärung damit kann ichw eiter arbeiten 🙂

    Viele Grüeß
    Ramnad



  • Ramnad schrieb:

    Warum gibt es bei eienr aussage das beide Strings gleich sind, also frage ob identisch gleich wahrist, die Ausgabe 0?

    Warum liest du nicht die Dokumentation zu strcmp? Da steht das drin.

    Die Funktion heißt nicht strequal sondern strcmp (für string compare). Mit den andeen beiden Rückgabewerten (-1 und +1) kannst du diese Funktion zum sortieren von Strings benutzen.

    Noch als Tipp:
    Mit printf("%s\n", argv[1]); kannst du schlecht ein '\n' am Ende des Strings feststellen.
    Mit

    printf("<%s>\n", argv[1]);
    

    kannst du dass an den <> sehen.



  • Aha 💡 ok das mit den -1 und +1 als ausgabe ist nicht schlecht gut zu wissen
    sorry hab das in der Doku irgendwie überlesen werd in zukunft genauer drauf achten

    Vielen Dank für die Hilfe!

    Grüße
    Ramnad



  • Ramnad schrieb:

    sorry hab das in der Doku irgendwie überlesen werd in zukunft genauer drauf achten

    Du hast von einer anderen Programmiersprache (hier MATLAB) auf das Verhalten von C geschlossen.

    Das funktioniert nicht. Vor allem nicht bei Arrays (und somit auch Strings).


Log in to reply