Namespaces
Variants

std:: memset

From cppreference.net
Definido en el encabezado <cstring>
void * memset ( void * dest, int ch, std:: size_t count ) ;

Copia el valor static_cast < unsigned char > ( ch ) en cada uno de los primeros count caracteres del objeto apuntado por dest . Si el objeto es un subobjeto potencialmente superpuesto o no es TriviallyCopyable (por ejemplo, escalar, estructura compatible con C, o un array de tipo trivialmente copiable), el comportamiento es indefinido. Si count es mayor que el tamaño del objeto apuntado por dest , el comportamiento es indefinido.

Contenidos

Parámetros

dest - puntero al objeto a llenar
ch - byte de relleno
count - número de bytes a llenar

Valor de retorno

dest

Notas

std::memset puede ser optimizado (bajo las reglas as-if ) si el objeto modificado por esta función no se accede nuevamente durante el resto de su tiempo de vida (por ejemplo, gcc bug 8537 ). Por esta razón, esta función no puede utilizarse para limpiar memoria (por ejemplo, para llenar con ceros un array que almacenó una contraseña).

Las soluciones para eso incluyen std::fill con punteros volátiles, (C23) memset_explicit() , (C11) memset_s , FreeBSD explicit_bzero o Microsoft SecureZeroMemory .

Ejemplo

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

Salida:

00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011

Véase también

copia un búfer a otro
(función)
mueve un búfer a otro
(función)
copia el carácter ancho dado a cada posición en un arreglo de caracteres anchos
(función)
asigna por copia el valor dado a cada elemento en un rango
(plantilla de función)
asigna por copia el valor dado a N elementos en un rango
(plantilla de función)
verifica si un tipo es trivialmente copiable
(plantilla de clase)
Documentación C para memset