leere strings die nicht leer sind ??
-
Hi zusammen
Ich habe einwenig ein kurioses problem...
Ich habenormale Srings (also datentyp char) wenn ich diese Abfrage, ob sie leer sei klappt es nicht.
Also ich paste mal die Abfrage damit es klarer wird:if (userVariable = NULL){ printf("wert leer"); }
Habe natürlich auch printf's gemacht um es zu überprüfen... diese Var. ist leer!
Kann es sein das sie nicht null ist eventuell wegen des \0 (end of word)?
Bitte sagt mir das ich etwas kleines übersehen oder vergessen habe...
thx for help
-
Hi Monte_Cristo,
als erstes ist dein if-Block keine Abfrage sondern eine Zuweisung == statt =. Zum Zweiten prüfst du den Zeiger auf NULL ab...willst du das wirklich? Dein Code sollte eigendlich so aussehen:if ( userVariable[0] == NULL ) { printf("wert leer"); }
-
Ok also das mit den == war ein tippfehler
aber das mit dem [0] verwirrt mich einwenig. werden nicht arrays so ausgelesen?
wenn ich es kompiliere gibt es folgende meldung:
Warnung: Zuweisung erzeugt Ganzzahl von Zeiger ohne Typenkonvertierungwie währe es so?
if ( *userVariable == NULL ) { printf("wert leer"); }
-
Sry, habe das Gleichzeichen vergessen.
Die Fehlermeldung heisst:
Warnung: Vergleich zwischen Zeiger und Ganzzahl
Also sollte (userVariable == NULL) schon stimmen?!?!?
-
Die Verwendung von NULL ist hier Quatsch, da du den Speicher für den String immer r noch reserviert hast, egal, was da drin steht.
Strings können in c nicht verglichen werden über den == Operator. Das geht nur über die Funtkion strcmp, welche bei Gleichheit 0 liefert.Also :
[cpp]
if ( strcmp(userVariable,"")==0 )
{
printf("wert leer");
}
[code]
-
Herrmann schrieb:
if ( userVariable[0] == NULL )
Das ist zwar technisch richtig, aber vom Sinn her falsch. Ein String ist definiert als eine durch ein Nullbyte abgeschlossene Zeichenfolge. Ein leerer String besteht folglich nur aus einem Nullbyte. Die "schönste" Art ein Nullbyte zu repräsentieren ist zweifellos '\0', da sieht jeder sofort, aha, ein char mit dem Wert 0. Dass char-Literale den Typ int haben, '\0' also in jeder Hinsicht das gleiche wie 0 ist, lassen wir dabei mal unter den Tisch fallen :>
Man kann natürlich auch direkt auf 0 vergleichen, oder ausnutzen, dass int als boolscher Wert benutzt werden kann, indem man einfach if (!userVariable[0]) schreibt.
NULL dagegen steht für einen Nullzeiger. Das ist zwar auch nur ein Präprozessor-define für 0, 0L, (void*)0 oder sowas in der Art und funktioniert auch im obigen Kontext, bringt aber jeden, der das liest, auf die falsche Fährte.
-
Hey! Ich weiss zwar noch nicht was ein Präprozessor ist, aber es hat funktioniert!!
THX a lot
-
Monte_Cristo schrieb:
Hey! Ich weiss zwar noch nicht was ein Präprozessor ist, aber es hat funktioniert!!
Ich könnts dir verraten, aber dann müsst ich dich erschießen.