Initialisieren Sie einen String in C als leeren String

Lesezeit: 3 Minuten

Benutzer-Avatar
maayan

Ich möchte eine Zeichenfolge in C in eine leere Zeichenfolge initialisieren. Ich habe es versucht:

string[0] = ""; 

aber es hat geschrieben

"warning: assignment makes integer from pointer without a cast"

Wie soll ich es denn machen?

  • Was bringt es, eine Zeichenfolge mit 0 Zeichen zu deklarieren?

    – CDhowie

    10. November 2010 um 9:05 Uhr

  • Welcher Typ ist dein string ? Ist es ein Char-Zeiger oder ein Char-Array?

    – Nr

    10. November 2010 um 9:05 Uhr

  • @cdhowie: Es kann zum Beispiel ein nützlicher Sentinel-Wert sein.

    – Oliver Charlesworth

    10. November 2010 um 9:08 Uhr

  • Ach, falsch verstanden. “string” war eine zuvor definierte Variable. Ich dachte, das wäre eine Art seltsame fubare Variablendeklaration.

    – CDhowie

    10. November 2010 um 9:11 Uhr

  • gültige Frage @leppie Was ist String.

    Benutzer1011455

    23. Mai 2012 um 6:55 Uhr

Zusätzlich zur Version von Will Dean ist Folgendes für die Initialisierung des gesamten Puffers üblich:

char s[10] = {'\0'};

oder

char s[10];
memset(s, '\0', sizeof(s));

oder

char s[10];
strncpy(s, "", sizeof(s));

  • Vielen Dank 8 Jahre alte Antwort. Konnte nicht viel zur vollständigen Pufferinitialisierung finden.

    – Parth Patel

    30. November 2018 um 18:56 Uhr

Benutzer-Avatar
Will Dekan

Sie möchten das erste Zeichen der Zeichenfolge wie folgt auf Null setzen:

char myString[10];
myString[0] = '\0';

(Oder myString[0] = 0;)

Oder eigentlich können Sie bei der Initialisierung Folgendes tun:

char myString[10] = "";

Dies ist jedoch keine allgemeine Methode, um eine Zeichenfolge auf die Länge Null zu setzen, sobald sie definiert wurde.

  • char myString[1] = ""; sicherlich? Sie brauchen Platz für das Null-Terminator.

    – JeremyP

    10. November 2010 um 9:24 Uhr

  • Korrektur: Sie könnten tun char myString[10] = "";

    – ruslik

    10. November 2010 um 9:37 Uhr

  • @JeremyP: "" steht für "\0"also denke ich char myString[1] reicht.

    – Nan Xiao

    14. September 2017 um 5:31 Uhr

  • @NanXiao Der Code sagte char myString[0] = ""; als ich den Kommentar geschrieben habe. Es wurde inzwischen korrigiert.

    – JeremyP

    18. September 2017 um 9:05 Uhr


Benutzer-Avatar
Dachs

Angenommen, Ihr Array mit dem Namen “string” existiert bereits, versuchen Sie es

string[0] = '\0';

\0 ist der explizite NUL-Terminator, der erforderlich ist, um das Ende der Zeichenfolge zu markieren.

  • @badgerr: Würden Sie bitte Ihre Antwort ändern, um sie zu verwenden '\0' ?

    – pevik

    28. März 2017 um 8:36 Uhr

Das Zuweisen von Zeichenfolgenliteralen zu einem char-Array ist nur während der Deklaration zulässig:

char string[] = "";

Dies deklariert string als char-Array der Größe 1 und initialisiert es mit \0.

Versuchen Sie dies auch:

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5

calloc weist den angeforderten Speicher zu und gibt einen Zeiger darauf zurück. Außerdem wird der zugewiesene Speicher auf Null gesetzt.

Falls Sie vorhaben, Ihre zu verwenden string als leere Zeichenfolge die ganze Zeit:

char *string = NULL;
string = (char*)calloc(1, sizeof(char));

Falls Sie vorhaben, einen Wert in Ihrem zu speichern string später:

char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));

Benutzer-Avatar
Konkret

Um dies zu erreichen, können Sie Folgendes verwenden:

strcpy(string, "");

Benutzer-Avatar
pmg

string[0] = "";
"warning: assignment makes integer from pointer without a cast

Ok, lass uns in den Ausdruck eintauchen …

0 ein int: stellt die Anzahl der Zeichen dar (vorausgesetzt string ist (oder zerfällt in) ein char *), um vom Anfang des Objekts fortzuschreiten string

string[0]: das char Objekt, das sich am Anfang des Objekts befindet string

"": Zeichenfolgenliteral: ein Objekt des Typs char[1]

=: Zuweisungsoperator: versucht, einen Wert vom Typ zuzuweisen char[1] zu einem Objekt des Typs char. char[1] (zerfallen zu char*) und char sind nicht zuweisungskompatibel, aber der Compiler vertraut Ihnen (dem Programmierer) und fährt trotzdem mit der Zuweisung fort, indem er den Typ umwandelt char* (was char[1] zerfallen zu) zu einem int — und Sie erhalten die Warnung als Bonus. Du hast einen wirklich guten Compiler 🙂

  • Würde mehr Upvotes bekommen, wenn es eine Lösung gäbe; das ist aber eine gute Erklärung für das, was passiert.

    – wizzwizz4

    28. Dezember 2015 um 12:47 Uhr

  • Ich stimme @wizzwizz4 zu, aber ich mag meine Antwort so wie sie ist. Vielen Dank!

    – pmg

    28. Dezember 2015 um 13:18 Uhr

1369970cookie-checkInitialisieren Sie einen String in C als leeren String

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

Privacy policy