Hallo ich habe mal eine grundlegende Frage die ich leider bisher noch nicht mit den Tutorials lösen konnte. Ich möchte mit der Funktion STRCASECMP einen String vergleichen. Als Beispiel if (STRCASECMP (string1,string2) == 0) dann .... Nun zu Meiner Frage. Worin besteht der Unterschied bzw. was empfiehlt sich für eine Definition von String 2. Ich habe bis jetzt folgende Möglichkeiten und überlege welches wohl die beste Möglichkeit ist und warum, bzw. gibt es Nachteile?. 1. if (STRCASECMP (string1,"Hallo") == 0) 2. string2 = "Hallo" (bei Funktionsaufruf); if (STRCASECMP (string1,string2") == 0) 3. const char string2[] = "Hallo"; if (STRCASECMP (string1,string2") == 0) Vielleich kann mir das jemand erklären oder kennt ein Tutorial zu dem Thema. Vielen Dank.
Version 1 laesst sofort erkennen was Du willst. Version 4 wuerde auch Sinn machen : im headerfile: #ifdef GERMAN #define ERRORMESSAGE_85 "Hallo" #else #define ERRORMESSAGE_85 "Hello" #endif dann im code #include errormessages.h ... if (STRCASECMP (string1,ERRORMESSAGE_85) == 0) also leicht internationalisierbar es kommt also immer drauf an was man will
Vielen dank. Soweit habe ich noch garnicht gedacht, aber das ist natürlich genial!. Vielen Dank für die schnelle Antwort
beginner schrieb: > 1. > if (STRCASECMP (string1,"Hallo") == 0) Die Zeichenkette wird zur Laufzeit auf dem Stack angelegt und die Funktion benutzt immer den selben Zeiger. > 2. > string2 = "Hallo" (bei Funktionsaufruf); > if (STRCASECMP (string1,string2") == 0) Die Zeichenkette wird zur Compile-Zeit initialisiert und nur der Zeiger auf die Zeichenkette wird auf dem Stack übergeben. Es könnte aber auch ein Zeiger auf eine beliebige andere Zeichenkette sein bzw. string2 kann seinen Wert zur Laufzeit ändern. > 3. > const char string2[] = "Hallo"; > if (STRCASECMP (string1,string2") == 0) Der Unterschied zur zweiten Variante ist die Kennzeichnung der Zeichenkette als konstante Daten. "Unter der Haube" passiert aber genau das Gleiche wie in Variante 2, es wird nur der Zeiger übergeben.
Moin, kommt auch darauf an, von welchem Typ die Eingangsattribute der Methode STRCASECMP sind. (const char *) ist dann doch nicht so fehleranfällig. if (0 == STRCASECMP((const char *) str1, (const char *) str2)) { } Bei dem #define ERRORMESSAGE_85... musst Du wahrscheinlich casten. Kommt auf den Compiler an. Rosa
Meister Eder schrieb: > beginner schrieb: >> 1. >> if (STRCASECMP (string1,"Hallo") == 0) > > Die Zeichenkette wird zur Laufzeit auf dem Stack angelegt > und die Funktion benutzt immer den selben Zeiger. Wieso sollte hier irgendeine Zeichenkette auf dem Stack angelegt werden? GCC würde es nicht machen, andere ISO-C Compiler hätten auch keinen Grund.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.