Cancella array di caratteri in C

Jinku Hu 12 ottobre 2023
  1. Usa la funzione memset per cancellare l’array di caratteri in C
  2. Usa le funzioni bzero o explicit_bzero per cancellare l’array di caratteri in C
Cancella array di caratteri in C

Questo articolo spiegherà diversi metodi su come cancellare l’array di caratteri in C.

Usa la funzione memset per cancellare l’array di caratteri in C

La funzione memset viene generalmente utilizzata per impostare la regione di memoria con il valore costante. La funzione fa parte della libreria standard ed è definita nel file di intestazione <string.h>.

memset richiede tre argomenti: il primo è il puntatore void alla regione di memoria, il secondo è il valore del byte costante e l’ultimo denota il numero di byte da riempire all’indirizzo di memoria specificato. Nota che possiamo passare il valore intero 0 per cancellare l’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);
}

Produzione:

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

In alternativa, memset può essere chiamato con il carattere specifico come argomento byte costante, che può essere utile per inizializzare ogni dato elemento dell’array con gli stessi valori. In questo caso, scegliamo arbitrariamente il carattere zero per riempire l’array, risultando in una regione di memoria cancellata.

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

Produzione:

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,

Usa le funzioni bzero o explicit_bzero per cancellare l’array di caratteri in C

bzero è un’altra funzione di libreria standard per riempire l’area di memoria con i byte zero \0. Sono necessari solo due argomenti: il puntatore alla regione di memoria e il numero di byte da sovrascrivere. explicit_bzero, d’altra parte, è un’alternativa che garantisce di condurre l’operazione di scrittura indipendentemente dalle ottimizzazioni del compilatore. Se richiesto dall’utente, il compilatore analizza il codice per istruzioni ridondanti e le rimuove, e la funzione explicit_bzero è progettata per questo specifico scenario.

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

Articolo correlato - C Array