Ich dachte, wenn Sie das erste Element auf null setzen, wird 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 zu verwenden memset
, dachte ich, dass die 2 obigen Beispiele alle Daten löschen sollten.
Antworten:
Dies hängt davon ab, wie Sie das Array anzeigen möchten. Wenn Sie das Array als eine Reihe von Zeichen anzeigen, können Sie die Daten nur löschen, indem Sie jeden Eintrag berühren.
memset
ist wahrscheinlich der effektivste Weg, um dies zu erreichen.Wenn Sie dies jedoch als nullterminierte C / C ++ - Zeichenfolge anzeigen, wird die Zeichenfolge durch Löschen des ersten Bytes auf 0 effektiv gelöscht.
quelle
Ein Array in C ist nur ein Speicherort. In der Tat setzt Ihre
my_custom_data[0] = '\0';
Zuweisung das erste Element einfach auf Null und lässt die anderen Elemente intakt.Wenn Sie alle Elemente des Arrays löschen möchten, müssen Sie jedes Element besuchen. Dafür ist da
memset
:Dies ist im Allgemeinen der schnellste Weg, dies zu erledigen. Wenn Sie C ++ verwenden können, ziehen Sie stattdessen std :: fill in Betracht:
quelle
Warum sollte das Setzen eines einzelnen Elements das gesamte Array löschen? Insbesondere in C passiert nie 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:
Ansonsten kenne ich keine andere Technik als Memset oder ähnliches.
quelle
Verwenden:
Oder:
quelle
memset(my_custom_data, 0, strlen(my_custom_data));
) wird nur bis zum ersten '\ 0' gelöscht, das möglicherweise über das Ende des Arrays hinausgeht. Dies kann in Ordnung sein oder auch nicht.Versuchen Sie den folgenden Code:
quelle
Warum nicht verwenden
memset()
? So geht das.Wenn Sie das erste Element festlegen, bleibt der Rest des Speichers unberührt, aber str-Funktionen behandeln die Daten als leer.
quelle
Bitte finden Sie unten, wo ich mit Daten im Array nach Fall 1 und Fall 2 erklärt habe.
Fall 1:
Ergebnis:
Fall 2:
Ergebnis:
Obwohl das Setzen des ersten Arguments auf NULL ausreicht, ist die Verwendung von memset ratsam
quelle
Nee. Sie setzen lediglich den ersten Wert auf '\ 0' oder 0.
Wenn Sie mit nullterminierten Zeichenfolgen arbeiten, erhalten Sie im ersten Beispiel ein Verhalten, das Ihren Erwartungen entspricht, der Speicher ist jedoch weiterhin festgelegt.
Wenn Sie den Speicher ohne Verwendung von memset löschen möchten, verwenden Sie eine for-Schleife.
quelle
Sie sollten memset verwenden. Das Festlegen nur des ersten Elements funktioniert nicht. Sie müssen alle Elemente festlegen. Wenn nicht, wie können Sie nur das erste Element auf 0 setzen?
quelle
Das Schreiben eines Nullzeichens in das erste Zeichen bewirkt genau das. Wenn Sie es als Zeichenfolge behandeln, wird es durch Code, der dem Nullterminierungszeichen folgt, als Nullzeichenfolge behandelt. Dies entspricht jedoch nicht dem Löschen der Daten. Wenn Sie die Daten tatsächlich löschen möchten, müssen Sie memset verwenden.
quelle
Normalerweise mag ich das einfach so:
quelle
Das ist nicht richtig, wie Sie entdeckt haben
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 das Setzen eines Elements des Arrays auf null jedoch etwas Besonderes bedeutet (z. B. bei Verwendung einer nullterminierenden Zeichenfolge in), kann es ausreichend sein, 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
quelle
Setzen Sie das erste Element auf NULL. Wenn Sie das char-Array drucken, erhalten Sie nichts zurück.
quelle
Wie wäre es mit folgendem:
quelle
quelle
Versuche Folgendes:
quelle