MEMSET |
Fixe la mémoire |
---|---|
Langage C | string.h |
Syntaxe
void *memset(const void *tampon, int caractere, size_t n); |
Paramètres
Nom | Description |
---|---|
tampon | Ce paramètre permet d'indiquer le tampon à traiter |
caractere | Ce paramètre permet d'indiquer le caractère à copier |
n | Ce paramètre permet d'indiquer la taille du tampon en octets |
Description
Cette fonction permet de rechercher un caractère dans le tampon de «n» octets.
Algorithme
MODULE MEMSET(ptr, value, n) * Remplir les n premiers octets de ptr avec la valeur donnée BOUCLE POUR i ← 0 JUSQU'A n - 1 FAIRE * Affecter la valeur à chaque octet de la zone mémoire ptr[i] ← value FIN BOUCLE POUR * Retourner le pointeur vers la zone mémoire modifiée RETOURNE ptr |
Remarques
- Fonction de remplissage de mémoire : La fonction memset est utilisée pour remplir une zone de mémoire avec une valeur spécifique. Elle permet d'initialiser un bloc de mémoire à une valeur donnée, ce qui est utile dans de nombreuses situations, par exemple pour mettre à zéro une structure ou un tableau.
- Remplissage de mémoire octet par octet : Bien que memset prenne un entier pour la valeur à insérer (value), cette valeur est en fait convertie en un octet (byte). Cela signifie que la fonction peut remplir une zone de mémoire avec une valeur d'octet unique, et non nécessairement un entier de plusieurs octets. Par exemple, pour remplir un tableau de int, chaque octet de l'int sera initialisé avec la valeur spécifiée.
- Utilisation pour l'initialisation : memset est couramment utilisée pour initialiser des tableaux, des tampons ou des structures à une valeur particulière avant de les utiliser. Par exemple, on peut initialiser un tableau d'entiers à zéro ou remplir un tampon avec un caractère spécifique. C'est particulièrement utile pour garantir qu'aucune donnée résiduelle ne soit présente dans une zone mémoire avant son utilisation.
- Limitation à la valeur d'un octet : La fonction memset ne peut remplir que la zone mémoire octet par octet, car la valeur fournie (value) est un int, mais est convertie en un seul octet (les 8 bits de poids faible). Cela signifie que si vous souhaitez remplir une zone mémoire avec une valeur occupant plus d'un octet (par exemple, un entier 32 bits), la fonction ne fonctionnera pas comme prévu.
- Performance et optimisation : memset est souvent optimisée pour la performance. Les implémentations modernes de la fonction peuvent utiliser des instructions processeur spécialisées, comme les opérations de vecteurs ou les instructions SIMD, pour remplir des blocs de mémoire de manière plus rapide et efficace, en particulier pour de grands blocs de données.
- Effet sur les données non initialisées : L'un des cas d'utilisation classiques de memset est de réinitialiser la mémoire allouée avant de l'utiliser, notamment dans des structures de données ou des tableaux de travail. Toutefois, l'utilisation d'une valeur de remplissage non appropriée (comme memset(ptr, 0xFF, size)) peut causer des problèmes si les programmes s'attendent à une initialisation de données à zéro ou une autre valeur spécifique.
- Utilisation avec des pointeurs et des structures : memset est également couramment utilisée pour initialiser ou réinitialiser des structures. Par exemple, en C, vous pouvez utiliser memset pour initialiser toutes les valeurs d'une structure à zéro, ce qui est équivalent à une initialisation manuelle de chaque champ. Cela peut être particulièrement utile lors de l'initialisation de structures avant leur utilisation dans des algorithmes complexes.
Exemple
Voici un exemple permettant d'initialiser tous les valeurs d'une structure de données rapidement :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main()
- {
- struct {
- double X1;
- double Y1;
- double X2;
- double Y2;
- char titre[255];
- } coord;
- memset(&coord,0,sizeof(coord));
- printf("X1 = %f\n",coord.X1);
- printf("Y1 = %f\n",coord.Y1);
- printf("X2 = %f\n",coord.X2);
- printf("Y2 = %f\n",coord.Y2);
- printf("titre = %s\n",coord.titre);
- return 0;
- }
on obtiendra le résultat suivant :
X1 = 0.000000Y1 = 0.000000
X2 = 0.000000
Y2 = 0.000000
titre =
Cet exemple permet de répéter le caractère astérix 50 fois :
Essayer maintenant !
on obtiendra le résultat suivant :
DuplicateString = **************************************************Voir également
Langage de programmation - C - Référence de procédures et fonctions - memcpy
Langage de programmation - C++ - Référence de procédures et fonctions - memset
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 177.
Dernière mise à jour : Mardi, le 28 juillet 2015