Effacer le tableau de caractères en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction memset pour effacer les tableaux de caractères en C
  2. Utiliser les fonctions bzero ou explicit_bzero pour effacer les tableaux de caractères en C
Effacer le tableau de caractères en C

Cet article expliquera plusieurs méthodes de nettoyage des tableau de caractères en C.

Utiliser la fonction memset pour effacer les tableaux de caractères en C

La fonction memset est généralement utilisée pour définir la zone de mémoire avec une valeur constante. La fonction fait partie de la bibliothèque standard et est définie dans le fichier d’en-tête <string.h>.

La fonction memset prend trois arguments - le premier est le pointeur void vers la zone mémoire, le second est la valeur constante de l’octet, et le dernier indique le nombre d’octets à remplir à l’adresse mémoire donnée. Notez que nous pouvons passer la valeur entière 0 pour effacer le tableau char.

#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);
}

Production :

arr: a, b, c, d, e, f, g,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
arr:  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,

Alternativement, memset peut être appelé avec le caractère spécifique comme argument de l’octet constant, ce qui peut être utile pour initialiser chaque élément de tableau donné avec les mêmes valeurs. Dans ce cas, nous choisissons arbitrairement le caractère zéro pour remplir le tableau, ce qui donne une zone mémoire effacée.

#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);
}

Production :

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,

Utiliser les fonctions bzero ou explicit_bzero pour effacer les tableaux de caractères en C

bzero est une autre fonction standard de la bibliothèque pour remplir la zone de mémoire avec les octets zéro \0. Elle ne nécessite que deux arguments - le pointeur vers la zone de mémoire et le nombre d’octets à écraser. explicit_bzero, d’autre part, est une alternative qui garantit de mener l’opération d’écriture indépendamment des optimisations du compilateur. Si l’utilisateur le demande, le compilateur analyse le code pour détecter les instructions redondantes et les supprime, et la fonction explicit_bzero est conçue pour ce scénario spécifique.

#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);
}
Auteur: 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

Article connexe - C Array