Cancella array di caratteri in C
-
Usa la funzione
memset
per cancellare l’array di caratteri in C -
Usa le funzioni
bzero
oexplicit_bzero
per cancellare l’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);
}
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