wake-up-neo.com

Wie leert man ein Zeichenfeld?

Haben Sie ein Array von Zeichen wie char-Members [255]. Wie kann ich es vollständig leeren, ohne eine Schleife zu verwenden?

char members[255];

Mit "leer" meine ich, dass, wenn es einige Werte gespeichert hat, 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"
61
Alex Xander

mit

  memset(members, 0, 255);

im Algemeinen

  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 einer Zeichenfolge geändert. memset ist zu viel und das Nullstellen des ersten Elements genügt (wie in anderen Antworten erwähnt).


EDIT Um memset verwenden zu können, müssen Sie include string.h einschließen.

126
Steve Gilham

Kommt drauf an, was Sie mit "leer" meinen:

members[0] = '\0';
30
Felix

zeichenmitglieder [255] = {0};

7
user44556

EDIT: Angesichts der letzten Bearbeitung der Frage wird dies nicht mehr funktionieren, da keine Nullkündigung erfolgt. Wenn Sie das Array drucken wollten, würden Sie Ihre Zeichen gefolgt von einer Reihe von nicht-menschlichen Zeichen erhalten lesbare Zeichen Allerdings lasse ich diese Antwort hier als Community-Wiki für die Nachwelt.

char members[255] = { 0 };

Das sollte funktionieren. Gemäß der Programmiersprache C:

Wenn das Array eine feste Größe hat, darf die Anzahl der Initialisierer die Anzahl der Mitglieder des Arrays nicht überschreiten. Wenn es weniger gibt, werden die verbleibenden Mitglieder mit 0 initialisiert.

Dies bedeutet, dass jedes Element des Arrays einen Wert von 0 hat. Ich bin nicht sicher, ob Sie dies als "leer" bezeichnen würden oder nicht, da 0 ein gültiger Wert für eine char ist.

4
Thomas Owens

Sie können ein Array nicht als solches leeren, es enthält immer dieselbe Datenmenge.

In einem größeren Kontext stellen die Daten im Array möglicherweise eine leere Liste von Elementen dar, die jedoch zusätzlich zum Array definiert werden muss. Am häufigsten werden dazu die gültigen Elemente gezählt (siehe Antwort von pmg) oder Zeichenfolgen, die sie mit einem Nullzeichen abschließen (die Antwort von Felix). Es gibt auch kompliziertere Möglichkeiten. Beispielsweise verwendet ein Ringpuffer zwei Indizes für die Positionen, an denen Daten hinzugefügt und entfernt werden.

3
starblue

Versuchen Sie nicht, Ihr Zeichen-Array auf Null zu stellen, wenn Sie mit Strings arbeiten. Im Folgenden finden Sie eine einfache Möglichkeit, mit den Zeichenfolgen zu arbeiten.

Kopieren (neuen String zuweisen):

strcpy(members, "hello");

Verketten (fügen Sie die Zeichenfolge hinzu):

strcat(members, " world");

Leerer String:

members[0] = 0;

So einfach ist das.

3

Verwenden Sie bzero(array name, no.of bytes to be cleared);

2
Chibi.Coder

Ich würde mitgehen

members_in_use = 0;
2
pmg
members[0] = 0;

ist genug, um Ihre Anforderungen zu erfüllen.

Beachten Sie jedoch, dass dies den Puffer nicht "leert". Der Speicher ist noch belegt, gültige Zeichenwerte können noch vorhanden sein usw.

2

einfacher ist besser - sinnvoll?

in diesem Fall funktioniert nur mit Mitgliedern [0] = 0 eine einfache Frage nicht so kompliziert.

1
Test

Sie können die folgende Anweisung verwenden:

strcpy_s(members, "");
0
user8853435

Haftungsausschluss: Normalerweise programmiere ich nicht in C, daher gibt es in meinen Beispielen möglicherweise eine Syntax "gotcha", aber ich hoffe, dass die Ideen, die ich ausdrücken möchte, klar sind.

Wenn "Leeren" bedeutet "Enthält eine leere Zeichenfolge", können Sie das erste Array-Element einfach Null zuweisen, wodurch das Array tatsächlich eine Empry-Zeichenfolge enthält:

members[0] = 0;

Wenn "Leeren" "Freigeben des von ihm verwendeten Speichers" bedeutet, sollten Sie zunächst kein Array mit festen Zeichen verwenden. Stattdessen sollten Sie einen Zeiger auf char definieren und dann 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");
0
Konamiman

Wenn Sie ein Array leeren, wenn Sie auf 0 zurücksetzen wollen, 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);  
0
secureBadshah