… Die Inhalte von text[] wird nicht initialisiert und undefiniert sein. Daher, strlen(text) gibt ein undefiniertes Ergebnis zurück.
Der einfachste/schnellste Weg, um sicherzustellen, dass ein C-String mit dem leeren String initialisiert wird, besteht darin, einfach das erste Byte auf 0 zu setzen.
char text[50];
text[0] = 0;
Ab dann beides strlen(text) und die sehr-schnell-aber-nicht-so-geradlinig (text[0] == 0) Tests erkennen beide die leere Zeichenfolge.
Ich habe das schlecht strukturiert, ich meinte für das memset(text, 0, sizeof(text)); unmittelbar nach char text kommen[50]; weil ich nicht sicher war, ob es eine schlechte Angewohnheit war, ein char-Array zu löschen, bevor ihm etwas zugewiesen wurde.
– ZPS
25. November 2009 um 0:24 Uhr
Es ist sicherlich eine schlechte Idee, ein Array zu strlen, bevor es zugewiesen wird – strlen wird durch den Speicher vorrücken, bis es ein 0-Byte erreicht, was weit über das Ende des Arrays hinausgehen kann.
– Graem Perrow
25. November 2009 um 1:22 Uhr
Hängt davon ab, ob Ihr Array eine nullterminierte Zeichenfolge enthält oder nicht. Wenn ja, dann
if(text[0] == '\0') {}
sollte ausreichen.
Edit: Eine andere Methode wäre …
if (strcmp(text, "") == 0)
was möglicherweise weniger effizient ist, aber Ihre Absicht klar zum Ausdruck bringt.
bei mir funktioniert folgendes if(text[0]==”){falsch zurückgeben;} wahr zurückgeben;
– Amandeep Rohila
9. Dezember 2021 um 12:27 Uhr
Dies funktioniert, um herauszufinden, ob ein Zeichenarray leer ist. Es ist wahrscheinlich auch das schnellste.
if(text[0] == '\0') {}
Das geht auch schnell, wenn die text Array ist leer. Wenn es Zeichen enthält, müssen zuerst alle darin enthaltenen Zeichen gezählt werden.
if(strlen(text) == 0) {}
Verwenden Sie strlen nicht, um zu testen, ob ein Cstring leer ist. Es ist kein konstanter Zeitbetrieb.
– Thomas Eding
13. Dezember 2012 um 22:34 Uhr
Was ich in der Antwort erkläre.
– Peter Stuifzand
24. Dezember 2012 um 14:04 Uhr
Die zweite Methode wäre mit ziemlicher Sicherheit der schnellste Weg, um zu testen, ob eine nullterminierte Zeichenfolge leer ist, da sie einen Lesevorgang und einen Vergleich umfasst. An diesem Ansatz ist in diesem Fall sicherlich nichts auszusetzen, also können Sie ihn genauso gut verwenden.
Die dritte Methode prüft nicht, ob ein Zeichenarray leer ist; es stellt sicher, dass ein Zeichenarray leer ist.
Der zweite ist am schnellsten. Verwenden strlen wird in der Nähe sein wenn der String ist zwar leer, aber strlen wird immer durch jedes Zeichen der Zeichenfolge iterieren, also wenn es so ist nicht leer, wird es viel mehr Arbeit leisten, als Sie brauchen.
Wie James erwähnt hat, löscht die dritte Option den String vor der Überprüfung, sodass die Überprüfung immer erfolgreich ist, aber bedeutungslos ist.
Edwin Pratt
if (text[0] == '\0')
{
/* Code... */
}
Verwenden Sie dies, wenn Sie für Mikrocontroller mit wenig Platz auf Flash und/oder RAM codieren. Sie werden verschwenden viel mehr Blitz mit strlen als das erste Byte zu prüfen.
Das obige Beispiel ist das schnellste und es ist weniger Berechnung erforderlich.
fja0568
if (!*text) {}
Das obige dereferenziert den Zeiger ‘text’ und prüft, ob er Null ist. Alternative:
if (*text == 0) {}
14166800cookie-checkDer beste Weg, um zu überprüfen, ob ein Zeichen-Array leer istyes
Sie fragen sich also, ob Sie auf null testen müssen oder ob Sie die Zeichenfolge nur auf 0 setzen und dann auf 0 testen müssen?
– Jeremy L
25. November 2009 um 0:52 Uhr
Ja, ich war mir nicht sicher, ob ich einen String auf NULL testen könnte, wenn ich ihn einfach deklarieren und vorher nichts damit machen würde.
– ZPS
28. November 2009 um 5:45 Uhr