Borrar un array de caracteres en C

Jinku Hu 12 octubre 2023
  1. Usar la función memset para limpiar un array de caracteres en C
  2. Usar las funciones bzero o explicit_bzero para limpiar un array de caracteres en C
Borrar un array de caracteres en C

Este artículo explicará varios métodos para limpiar un array de caracteres en C.

Usar la función memset para limpiar un array de caracteres en C

La función memset se utiliza generalmente para establecer la región de memoria con el valor constante. La función es parte de la biblioteca estándar y se define en el archivo de cabecera <string.h>.

La función memset toma tres argumentos - el primero es el puntero void a la región de memoria, el segundo argumento es el valor constante del byte, y el último denota el número de bytes a rellenar en la dirección de memoria dada. Tenga en cuenta que podemos pasar el valor entero 0 para limpiar el array 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);
}

Producción :

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

Alternativamente, memset puede ser llamado con el carácter específico como argumento constante de bytes, lo que puede ser útil para inicializar cada elemento del array dado con los mismos valores. En este caso, elegimos arbitrariamente el carácter cero para llenar el array, resultando en una región de memoria despejada.

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

Producción :

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,

Usar las funciones bzero o explicit_bzero para limpiar un array de caracteres en C

bzero es otra función de la biblioteca estándar para llenar la zona de memoria con los bytes cero \0. Sólo toma dos argumentos - el puntero a la región de memoria y el número de bytes a sobrescribir. Por otro lado, explicit_bzero es una alternativa que garantiza la realización de la operación de escritura independientemente de las optimizaciones del compilador. Si el usuario lo indica, el compilador analiza el código en busca de instrucciones redundantes y las elimina, y la función explicit_bzero está diseñada para este escenario específico.

#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

Artículo relacionado - C Array