Ich dachte, durch das Setzen des ersten Elements auf null würde der gesamte Inhalt eines Char-Arrays gelöscht.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Dies setzt jedoch nur das erste Element auf null.
oder
my_custom_data[0] = 0;
anstatt memset
zu verwenden, dachte ich, dass die beiden obigen Beispiele alle Daten löschen sollen.
Es hängt davon ab, wie Sie das Array anzeigen möchten. Wenn Sie das Array als eine Reihe von Zeichen anzeigen, besteht die einzige Möglichkeit zum Löschen der Daten darin, jeden Eintrag zu berühren. memset
ist wahrscheinlich der effektivste Weg, um dies zu erreichen.
Wenn Sie dies jedoch als C/C++ - nullterminierte Zeichenfolge anzeigen möchten, wird das Setzen des ersten Bytes auf 0 die Zeichenfolge effektiv löschen.
Ein Array in C ist nur ein Speicherplatz. In der Tat setzt Ihre my_custom_data[0] = '\0';
-Zuordnung einfach das erste Element auf Null und die anderen Elemente bleiben erhalten.
Wenn Sie alle Elemente des Arrays löschen möchten, müssen Sie jedes Element besuchen. Dafür gibt es memset
:
memset(&arr[0], 0, sizeof(arr));
Dies ist in der Regel der schnellste Weg, dies zu tun. Wenn Sie C++ verwenden können, ziehen Sie stattdessen std :: fill in Betracht:
char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);
Warum würden Sie glauben, ein einzelnes Element zu setzen, würde das gesamte Array löschen? Vor allem in C passiert kaum etwas, ohne dass der Programmierer es explizit programmiert. Wenn Sie das erste Element auf Null (oder einen beliebigen Wert) setzen, haben Sie genau das getan und nichts weiter.
Bei der Initialisierung können Sie ein Array auf Null setzen:
char mcd[40] = {0}; /* sets the whole array */
Ansonsten kenne ich keine andere Technik als Memset oder ähnliches.
Benutzen:
memset(my_custom_data, 0, sizeof(my_custom_data));
Oder:
memset(my_custom_data, 0, strlen(my_custom_data));
Versuchen Sie den folgenden Code:
void clean(char *var) {
int i = 0;
while(var[i] != '\0') {
var[i] = '\0';
i++;
}
}
Warum nicht memset()
verwenden? So macht man es.
Wenn Sie das erste Element festlegen, bleibt der Rest des Speichers unangetastet, aber die str-Funktionen behandeln die Daten als leer.
Pls finden Sie unten, wo ich mit Daten im Feld nach Fall 1 und Fall 2 erklärt habe.
char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );
Fall 1:
sc_ArrData[0] = '\0';
Ergebnis:
- "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''
Fall 2:
memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));
Ergebnis:
- "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''
Wenn Sie das erste Argument auf NULL setzen, ist dies der Trick, aber es empfiehlt sich, Memset zu verwenden
Nee. Alles, was Sie tun, ist den ersten Wert auf '\ 0' oder 0 zu setzen.
Wenn Sie mit mit Null versehenen Zeichenfolgen arbeiten, wird im ersten Beispiel ein Verhalten angezeigt, das dem entspricht, was Sie erwarten. Der Speicher ist jedoch noch festgelegt.
Wenn Sie den Speicher ohne Memset löschen möchten, verwenden Sie eine for-Schleife.
Sie sollten Memset verwenden. Das Festlegen nur des ersten Elements funktioniert nicht. Sie müssen alle Elemente festlegen. Wenn nicht, wie könnten Sie nur das erste Element auf 0 setzen?
Das Schreiben eines Nullzeichens in das erste Zeichen bewirkt genau dies. Wenn Sie es als Zeichenfolge behandeln, wird der Code, der dem Null-Beendigungszeichen gehorcht, als Nullzeichenfolge behandelt. Dies ist jedoch nicht dasselbe wie das Löschen der Daten. Wenn Sie die Daten tatsächlich löschen möchten, müssen Sie memset verwenden.
Wie wäre es mit dem folgenden:
bzero(my_custom_data,40);
Ich dachte, indem ich das erste Element setzte. zu einer Null würde die gesamte .__ löschen. Inhalt eines Char-Arrays.
Das ist nicht richtig, wie Sie entdeckt haben
Dies setzt jedoch nur das erste Element auf null.
Genau!
Sie müssen memset verwenden, um alle Daten zu löschen. Es reicht nicht aus, einen der Einträge auf null zu setzen.
Wenn ein Element des Arrays auf null gesetzt wird, bedeutet dies jedoch etwas Besonderes (z. B. bei Verwendung eines nullenden Strings), reicht es möglicherweise aus, das erste Element auf null zu setzen. Auf diese Weise wird jeder Benutzer des Arrays verstehen, dass es leer ist, obwohl das Array noch die alten Zeichen im Speicher enthält
setzen Sie das erste Element auf NULL. Wenn Sie das Zeichen-Array drucken, erhalten Sie nichts zurück.
Ich mache das normalerweise einfach so:
memset(bufferar, '\0', sizeof(bufferar));