Wie kann ich überprüfen, ob die Variable char* auf eine leere Zeichenfolge zeigt?

Lesezeit: 4 Minuten

Aans Benutzer-Avatar
An

Wie kann ich überprüfen, ob char* Variable zeigt auf einen leeren String?

Benutzeravatar von Codemaker
Codemacher

Überprüfen Sie, ob das erste Zeichen ‘\0’ ist. Sie sollten wahrscheinlich auch überprüfen, ob Ihr Zeiger NULL ist.

char *c = "";
if ((c != NULL) && (c[0] == '\0')) {
   printf("c is empty\n");
}

Sie könnten diese beiden Überprüfungen in eine Funktion einfügen, um sie bequem und einfach wiederverwendbar zu machen.

Bearbeiten: In der if-Anweisung kann so gelesen werden: “Wenn c nicht Null ist und das erste Zeichen des Zeichenarrays ‘c’ nicht ‘\0’ oder Null ist, dann …”.

Das && kombiniert einfach die beiden Bedingungen. Es ist im Grunde so, als würde man sagen:

if (c != NULL) { /* AND (or &&) */
    if (c[0] == '\0') {
        printf("c is empty\n");
    }
}

Vielleicht möchten Sie sich ein gutes C-Programmierbuch besorgen, wenn Ihnen das nicht klar ist. Ich könnte ein Buch namens “The C Programming Language” empfehlen.

Die kürzeste Version, die der obigen entspricht, wäre:

if (c && !c[0]) {
  printf("c is empty\n");
}

  • @Zack: Was c && c[0] meint? Kannst du es bitte erklären?

    – An

    1. November 2011 um 18:15 Uhr

  • Persönlich würde ich die Prüfung auf einen NULL-Zeiger von der Prüfung auf einen leeren String trennen; die beiden sind nicht wirklich verwandt. “Portabler” ist wahrscheinlich nicht wirklich das, was Sie sagen wollten, da der gesamte Code, den Sie hier präsentieren, gültiges C (und auch C++) ist.

    – Markieren Sie Lösegeld

    1. November 2011 um 19:19 Uhr

  • Schreiben c != NULL statt nur c bekommt Sie dinged, wenn ich den Code überprüfe, weil die beiden genau gleich sind (solange c ist ein Zeiger) und die kürzere Form ist das Standard-C-Idiom. Nicht idiomatische Formen sollten nur verwendet werden, wenn Sie die Aufmerksamkeit eines menschlichen Lesers auf etwas Lustiges lenken möchten, aber hier passiert nichts Lustiges, also wird Idiom bevorzugt.

    – zol

    1. November 2011 um 19:51 Uhr

  • Ein Zeichen kürzer als Ihre “kürzeste Version” wäre if (c && !*c).

    – Markieren Sie Lösegeld

    22. Februar 2016 um 13:22 Uhr

Meine bevorzugte Methode:

if (*ptr == 0) // empty string

Wahrscheinlich häufiger:

if (strlen(ptr) == 0) // empty string

  • Beachten Sie, dass die zweite, “häufigere” Möglichkeit auch unnötig langsamer ist.

    – jpalecek

    1. November 2011 um 17:58 Uhr

  • @jpalecek, die Langsamkeit spielt oft keine Rolle und strlen ist leichter zu verstehen, wenn Sie nicht an die erste Form gewöhnt sind.

    – Markieren Sie Lösegeld

    1. November 2011 um 18:01 Uhr

  • @Adban, auf dieser Seite ist der beste Weg, jemandem zu danken, den Pfeil neben der Antwort zu drücken 🙂

    – Markieren Sie Lösegeld

    1. November 2011 um 19:16 Uhr

  • @MarkRansom: Du hast mich nichts gefragt hah! 🙂 nimm +1.

    – An

    1. November 2011 um 23:14 Uhr

  • @Romário die speziell gestellte Frage “zeigt auf eine leere Zeichenfolge”, das ist also die Frage, die ich beantwortet habe; ein Nullzeiger ist eine ganz andere Sache. Sie können einen Test für null mit den anderen kombinieren, die ich oben angegeben habe, und wenn Sie ihn an die erste Stelle setzen, werden die Kurzschlussregeln Sie davon abhalten, den Nullzeiger zu dereferenzieren. if (ptr == nullptr || *ptr == 0)

    – Markieren Sie Lösegeld

    19. Juli 2016 um 14:00 Uhr


Überprüfen Sie den Zeiger auf NULL und dann verwenden strlen um zu sehen, ob es zurückkehrt 0.
NULL Scheck ist wichtig, weil bestanden NULL Zeiger auf strlen ruft ein Undefiniertes Verhalten.

Ein leerer String hat ein einzelnes Null-Byte. Also testen if (s[0] == (char)0)

if (!*ptr) { /* empty string  */}

ähnlich

if (*ptr)  { /* not empty */ }

  • @igraczech, hmm, das sollte für den Fall funktionieren char *str = “”; if (!*str) { printf(“leer\n”); }. Habe ich einen subtilen Fall übersehen?

    – alwin

    3. Dezember 2016 um 8:10 Uhr

  • Tut mir leid, du hast Recht – es war mein dummes C-Zeiger-Versehen. Ich hatte den Fall, wo str auf eine Adresse zeigte, die nur ‘\0’ enthielt. Der Zeiger (*str) war also nicht null, wo der Wert (Inhalt der Adresse, auf die str zeigt) null war.

    – igraczech

    5. Dezember 2016 um 14:29 Uhr

Benutzeravatar von bhuwansahni
bhuwansahni

Ich würde es vorziehen, die strlen-Funktion zu verwenden, da Bibliotheksfunktionen am besten implementiert sind.

Also würde ich schreiben if(strlen(p)==0) //Leerer String

  • @igraczech, hmm, das sollte für den Fall funktionieren char *str = “”; if (!*str) { printf(“leer\n”); }. Habe ich einen subtilen Fall übersehen?

    – alwin

    3. Dezember 2016 um 8:10 Uhr

  • Tut mir leid, du hast Recht – es war mein dummes C-Zeiger-Versehen. Ich hatte den Fall, wo str auf eine Adresse zeigte, die nur ‘\0’ enthielt. Der Zeiger (*str) war also nicht null, wo der Wert (Inhalt der Adresse, auf die str zeigt) null war.

    – igraczech

    5. Dezember 2016 um 14:29 Uhr

Benutzeravatar von ikm104
ikm104

Gib es eine Chance:

Versuchen Sie, den String über die Funktion gets(string) abzurufen, und prüfen Sie dann die Bedingung als if(string[0] == ‘\0’)

1416350cookie-checkWie kann ich überprüfen, ob die Variable char* auf eine leere Zeichenfolge zeigt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy