Forum: Mikrocontroller und Digitale Elektronik Variablen. Anfänger braucht Tipp


von beginner (Gast)


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.

von martin (Gast)


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

von beginner (Gast)


Lesenswert?

Vielen dank.

Soweit habe ich noch garnicht gedacht, aber das ist natürlich genial!.

Vielen Dank für die schnelle Antwort

von Meister E. (edson)


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.

von Rosa-Kleidchen (Gast)


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

von Andreas B. (andreas_b77)


Lesenswert?

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
Noch kein Account? Hier anmelden.