Haben Sie eine Reihe von Zeichen wie Zeichenmitglieder [255]. Wie kann ich es vollständig leeren, ohne eine Schleife zu verwenden?
char members[255];
Mit "leer" meine ich, dass, wenn einige Werte darin gespeichert waren, dies nicht der Fall sein sollte. Wenn ich zum Beispiel strcat mache, sollte der alte Wert nicht bleiben
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
string
. Um einen String zu "leeren", setzen Sie sein erstes Element auf '\ 0':members[0] = '\0';
Antworten:
mit
memset(members, 0, 255);
im Allgemeinen
memset(members, 0, sizeof members);
wenn sich das Array im Gültigkeitsbereich befindet, oder
memset(members, 0, nMembers * (sizeof members[0]) );
Wenn Sie nur den Zeigerwert haben und nMembers die Anzahl der Elemente im Array ist.
BEARBEITEN Natürlich hat sich jetzt die Anforderung von der generischen Aufgabe des Löschens eines Arrays zum reinen Zurücksetzen eines Strings geändert,
memset
ist übertrieben und es reicht aus, nur das erste Element auf Null zu setzen (wie in anderen Antworten angegeben).BEARBEITEN Um memset verwenden zu können , müssen Sie string.h einschließen .
quelle
Kommt darauf an, was du mit "leer" meinst:
members[0] = '\0';
quelle
Versuchen Sie nicht, Ihr char-Array auf Null zu setzen, wenn Sie mit Zeichenfolgen arbeiten. Im Folgenden finden Sie eine einfache Möglichkeit, mit den Zeichenfolgen zu arbeiten.
Kopieren (neue Zeichenfolge zuweisen):
strcpy(members, "hello");
Verketten (Zeichenfolge hinzufügen):
strcat(members, " world");
Leerer String:
members[0] = 0;
So einfach ist das.
quelle
char Mitglieder [255] = {0};
quelle
BEARBEITEN: Angesichts der letzten Bearbeitung der Frage funktioniert dies nicht mehr, da es keine Nullterminierung gibt. Wenn Sie versuchen, das Array zu drucken, werden Ihre Zeichen gefolgt von einer Reihe nicht lesbarer Zeichen angezeigt. Allerdings lasse ich diese Antwort hier als Community-Wiki für die Nachwelt.
char members[255] = { 0 };
Das sollte funktionieren. Gemäß der Programmiersprache C:
Dies bedeutet, dass jedes Element des Arrays den Wert 0 hat. Ich bin mir nicht sicher, ob Sie dies als "leer" betrachten würden oder nicht, da 0 ein gültiger Wert für a ist
char
.quelle
Sie können ein Array als solches nicht leeren, es enthält immer die gleiche Datenmenge.
In einem größeren Kontext können die Daten im Array eine leere Liste von Elementen darstellen, dies muss jedoch zusätzlich zum Array definiert werden. Die gebräuchlichste Methode, dies zu tun, besteht darin, eine Anzahl gültiger Elemente zu behalten (siehe die Antwort von pmg) oder Zeichenfolgen zu verwenden, um sie mit einem Nullzeichen zu beenden (die Antwort von Felix). Es gibt auch kompliziertere Möglichkeiten, zum Beispiel verwendet ein Ringpuffer zwei Indizes für die Positionen, an denen Daten hinzugefügt und entfernt werden.
quelle
members[0] = 0;
ist genug, angesichts Ihrer Anforderungen.
Beachten Sie jedoch, dass der Puffer dadurch nicht "geleert" wird. Der Speicher ist weiterhin zugewiesen, möglicherweise sind noch gültige Zeichenwerte vorhanden usw.
quelle
0
ist ein gültiger Charakter. Wir wissen nicht, obmembers
sie als C-String behandelt werden oder nicht.Verwenden
bzero(array name, no.of bytes to be cleared);
quelle
Ich würde mitgehen
members_in_use = 0;
quelle
Wenn Sie ein Array leeren, wenn Sie auf 0 zurücksetzen möchten, können Sie bzero verwenden.
#include <strings.h> void bzero(void *s, size_t n);
Wenn Sie das Array mit einem anderen Standardzeichen füllen möchten, können Sie die Memset-Funktion verwenden.
#include <string.h> void *memset(void *s, int c, size_t n);
quelle
einfacher ist besser - sinnvoll?
In diesem Fall funktionieren nur Mitglieder [0] = 0. Mach eine einfache Frage nicht so kompliziert.
quelle
Haftungsausschluss: Normalerweise programmiere ich nicht in C, daher kann es in meinen Beispielen zu Syntaxproblemen kommen, aber ich hoffe, dass die Ideen, die ich auszudrücken versuche, klar sind.
Wenn "Entleeren" "eine leere Zeichenfolge enthalten" bedeutet, können Sie einfach das erste Array-Element auf Null setzen, wodurch das Array effektiv eine leere Zeichenfolge enthält:
members[0] = 0;
Wenn "Entleeren" "Freigeben des verwendeten Speichers" bedeutet, sollten Sie zunächst kein festes Zeichenarray verwenden. Stattdessen sollten Sie einen Zeiger auf char definieren und dann entsprechend malloc / free (oder String-Zuweisung) ausführen.
Ein Beispiel, das nur statische Zeichenfolgen verwendet:
char* emptyString=""; char* members; //Set string value members = "old value"; //Empty string value member = emptyString //Will return just "new" strcat(members,"new");
quelle
Sie können die folgende Anweisung verwenden:
strcpy_s(members, "");
quelle