Effacer le tableau de caractères en C
-
Utiliser la fonction
memset
pour effacer les tableaux de caractères en C -
Utiliser les fonctions
bzero
ouexplicit_bzero
pour effacer les tableaux 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);
}
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