Char-Array löschen in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion memset, um ein Char-Array in C zu löschen
  2. Verwenden der Funktionen bzero oder explicit_bzero zum Löschen eines Char-Arrays in C
Char-Array löschen 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);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C Array