Ich habe an einem Projekt in C gearbeitet, bei dem ich viel mit Strings herumspielen muss. Normalerweise programmiere ich in C++, also ist das etwas anders, als nur string.empty() zu sagen.
Ich frage mich, was der richtige Weg wäre, um eine Zeichenfolge in C zu leeren. Wäre es das?
Dein Beispiel ist verwirrend. Anscheinend wurde der Puffer an anderer Stelle deklariert und Sie versuchen, ihn aus einem Literal zu initialisieren. Hier muss nichts gelöscht werden.
– pmr
12. November 2011 um 21:55 Uhr
string.empty() verändert den String nicht
– David Heffernan
12. November 2011 um 21:57 Uhr
Kommt darauf an, was man unter “leer” versteht. Wenn Sie nur eine Zeichenfolge der Länge Null möchten, funktioniert Ihr Beispiel.
Das wird auch funktionieren:
buffer[0] = '\0';
Wenn Sie den gesamten Inhalt der Zeichenfolge auf Null setzen möchten, können Sie dies folgendermaßen tun:
memset(buffer,0,strlen(buffer));
Dies funktioniert jedoch nur zum Nullstellen bis zum ersten NULL-Zeichen.
Wenn die Zeichenfolge ein statisches Array ist, können Sie Folgendes verwenden:
memset(buffer,0,sizeof(buffer));
Zur Verdeutlichung funktioniert die letzte Methode, wenn buffer Es ist ein Array, aber nicht, wenn es ein Zeiger ist. Der Compiler muss die Größe des Arrays sehen können. Wenn buffer ein Zeiger ist, wird er nur die Größe eines Zeigers auf Null setzen, wahrscheinlich 4 oder 8 Bytes.
– Tor Klingeberg
14. September 2015 um 15:26 Uhr
Diese Antwort – stackoverflow.com/a/56048617/3114742 – spricht dafür, NIEMALS zu verwenden strlen mit memset – benutz nur sizeof
– Zach Smith
8. Mai 2019 um 20:40 Uhr
Zwei andere Möglichkeiten sind strcpy(str, ""); und string[0] = 0
Um den Variableninhalt wirklich zu löschen (falls Sie schmutzigen Code haben, der mit den obigen Schnipseln nicht richtig funktioniert 😛 ), verwenden Sie eine Schleife wie im folgenden Beispiel.
Falls Sie ein dynamisch zugewiesenes Array von Zeichen von Anfang an löschen möchten, können Sie entweder eine Kombination aus malloc() und memset() oder – und das ist viel schneller – calloc() verwenden, das dasselbe wie malloc tut, aber initialisiert das ganze Array mit Null.
Endlich möchte ich, dass Sie Ihre Laufzeit im Auge behalten. Wenn Sie große Arrays (6 Ziffern und mehr) handhaben, sollten Sie außerdem versuchen, den ersten Wert auf Null zu setzen, anstatt memset() durch den gesamten String laufen zu lassen.
Es mag zunächst schmutziger aussehen, ist aber viel schneller. Du musst nur mehr auf deinen Code achten 😉
Ich hoffe, das war für irgendjemanden nützlich 😉
Kommt darauf an, was du mit entleeren meinst. Wenn Sie nur eine leere Zeichenfolge möchten, können Sie dies tun
buffer[0] = 0;
Wenn Sie jedes Element auf Null setzen möchten, tun Sie dies
memset(buffer, 0, 80);
Wenn Sie versuchen, einen Empfangspuffer für etwas zu löschen, das Zeichenfolgen empfängt, habe ich herausgefunden, dass der beste Weg darin besteht, memset wie oben beschrieben zu verwenden. Der Grund dafür ist, dass, egal wie groß der nächste empfangene String ist (natürlich durch die Größe des Puffers begrenzt), er automatisch ein Asciiz-String ist, wenn er in einen vorab auf Null gesetzten Puffer geschrieben wird.
Ich bin ein Anfänger, aber … nach meinem Wissen ist der beste Weg
Benötigt den Namen der Zeichenfolge und seine Länge wird alle Zeichen auf Null setzen. Andere Methoden könnten bei der ersten Null, auf die sie stoßen, anhalten
Dein Beispiel ist verwirrend. Anscheinend wurde der Puffer an anderer Stelle deklariert und Sie versuchen, ihn aus einem Literal zu initialisieren. Hier muss nichts gelöscht werden.
– pmr
12. November 2011 um 21:55 Uhr
string.empty() verändert den String nicht
– David Heffernan
12. November 2011 um 21:57 Uhr