Namespaces
Variants

std:: memset

From cppreference.net
Défini dans l'en-tête <cstring>
void * memset ( void * dest, int ch, std:: size_t count ) ;

Copie la valeur static_cast < unsigned char > ( ch ) dans chacun des premiers count caractères de l'objet pointé par dest . Si l'objet est un sous-objet potentiellement chevauchant ou n'est pas TriviallyCopyable (par exemple, scalaire, structure compatible C ou tableau de type trivialement copiable), le comportement est indéfini. Si count est supérieur à la taille de l'objet pointé par dest , le comportement est indéfini.

Table des matières

Paramètres

dest - pointeur vers l'objet à remplir
ch - octet de remplissage
count - nombre d'octets à remplir

Valeur de retour

dest

Notes

std::memset peut être optimisé (selon les règles as-if ) si l'objet modifié par cette fonction n'est plus accédé pendant le reste de sa durée de vie (par exemple, gcc bug 8537 ). Pour cette raison, cette fonction ne peut pas être utilisée pour effacer la mémoire (par exemple, pour remplir un tableau qui stockait un mot de passe avec des zéros).

Les solutions pour cela incluent std::fill avec des pointeurs volatiles, (C23) memset_explicit() , (C11) memset_s , FreeBSD explicit_bzero ou Microsoft SecureZeroMemory .

Exemple

#include <bitset>
#include <climits>
#include <cstring>
#include <iostream>
int main()
{
    int a[4];
    using bits = std::bitset<sizeof(int) * CHAR_BIT>;
    std::memset(a, 0b1111'0000'0011, sizeof a);
    for (int ai : a)
        std::cout << bits(ai) << '\n';
}

Sortie :

00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011

Voir aussi

copie un tampon vers un autre
(fonction)
déplace un tampon vers un autre
(fonction)
copie le caractère large donné à chaque position d'un tableau de caractères larges
(fonction)
assigne par copie la valeur donnée à chaque élément d'une plage
(modèle de fonction)
assigne par copie la valeur donnée à N éléments d'une plage
(modèle de fonction)
vérifie si un type est trivialement copiable
(modèle de classe)
Documentation C pour memset