Char-Array löschen in C
-
Verwenden Sie die Funktion
memset
, um ein Char-Array in C zu löschen -
Verwenden der Funktionen
bzero
oderexplicit_bzero
zum Löschen eines Char-Arrays in C
In diesem Artikel werden verschiedene Methoden erklärt, wie man ein Char-Array in C löschen kann.
Verwenden Sie die Funktion memset
, um ein Char-Array in C zu löschen
Die Funktion memset
wird im Allgemeinen verwendet, um den Speicherbereich mit dem konstanten Wert zu setzen. Die Funktion ist Teil der Standardbibliothek und ist in der Header-Datei <string.h>
definiert.
memset
nimmt drei Argumente entgegen - das erste ist der void
-Zeiger auf die Speicherregion, das zweite Argument ist der konstante Byte-Wert, und das letzte bezeichnet die Anzahl der Bytes, die an der angegebenen Speicheradresse gefüllt werden sollen. Beachten Sie, dass wir den Integer-Wert 0
übergeben können, um das char
-Array zu löschen.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
#define LENGTH 20
int main() {
char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
printCharArray(c_arr, LENGTH);
memset(c_arr, 0, LENGTH);
printCharArray(c_arr, LENGTH);
exit(EXIT_SUCCESS);
}
Ausgabe:
arr: a, b, c, d, e, f, g, , , , , , , , , , , , , ,
arr: , , , , , , , , , , , , , , , , , , , ,
Alternativ kann memset
mit dem spezifischen Zeichen als konstantem Byte-Argument aufgerufen werden, was nützlich sein kann, um jedes gegebene Array-Element mit den gleichen Werten zu initialisieren. In diesem Fall wählen wir willkürlich das Zeichen Null, um das Array zu füllen, was zu einem gelöschten Speicherbereich führt.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
#define LENGTH 20
int main() {
char c_arr2[LENGTH] = "techarmp array";
printCharArray(c_arr2, LENGTH);
memset(c_arr2, '0', LENGTH);
printCharArray(c_arr2, LENGTH);
exit(EXIT_SUCCESS);
}
Ausgabe:
arr: t, e, m, p, , a, r, r, a, y, , , , , , , , , , ,
arr: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Verwenden der Funktionen bzero
oder explicit_bzero
zum Löschen eines Char-Arrays in C
bzero
ist eine weitere Standard-Bibliotheksfunktion, um den Speicherbereich mit den Null-Bytes \0
zu füllen. Sie benötigt nur zwei Argumente - den Zeiger auf den Speicherbereich und die Anzahl der zu überschreibenden Bytes. explicit_bzero
hingegen ist eine Alternative, die garantiert, den Schreibvorgang unabhängig von Compiler-Optimierungen durchzuführen. Auf Anweisung des Benutzers analysiert der Compiler den Code auf überflüssige Anweisungen und entfernt diese, und die Funktion explicit_bzero
ist für dieses spezielle Szenario konzipiert.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
#define LENGTH 20
int main() {
char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
printCharArray(c_arr, LENGTH);
bzero(c_arr, LENGTH);
printCharArray(c_arr, LENGTH);
explicit_bzero(c_arr, LENGTH);
printCharArray(c_arr, LENGTH);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook