Variablen. Anfänger braucht Tipp

Gast #2278679
Lesenswert?

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.
Gast #2278686
Lesenswert?

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
#2278695
Lesenswert?

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.
Gast #2278698
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren