Espacios de nombres
Variantes
Acciones

std::memcpy

De cppreference.com
< cpp‎ | string‎ | byte
 
 
 
Cadenas de bytes terminadas en nulo
Funciones
Manipulación de caracteres
Conversiones a formatos numéricos
(C++11)(C++11)
(C++11)(C++11)
Manipulación de cadenas
Examinación de cadenas
Manipulación de memoria
memcpy
Misceláneos
 
Definido en el archivo de encabezado <cstring>
void* memcpy( void* dest, const void* src, std::size_t count );

Copia una cuenta count de bytes del objeto apuntado por src al objeto apuntado por dest. Ambos objetos se reinterpretan como arrays de unsigned char.

Si los objetos se traslapan, el comportamiento es indefinido.

Si bien dest o src es un puntero inválido o nulo, el comportamiento es indefinido, incluso si count es cero.

Si los objetos potencialmente se traslapan o no son trivialmente copiables (TriviallyCopyable), el comportamiento de memcpy no está especificado y puede estar indefinido.

Contenido

[editar] Parámetros

dest - Puntero a la ubicación de memoria a la cual copiar.
src - Puntero a la ubicación de memoria de la cual copiar.
count - Número de bytes a copiar.

[editar] Valor de retorno

dest

[editar] Notas

Se pretende que std::memcpy sea la rutina de biblioteca más rápida para copiar de memoria a memoria. Habitualmente es más eficiente que std::strcpy, que debe escanear los datos que copia, o std::memmove, que debe tomar precauciones para manejar entradas traslapantes.

Varios compiladores de C++ transforman bucles de copiado de memoria adecuados para las llamadas a std::memcpy.

Puede usarse std::memcpy para convertir los valores donde el alias estricto prohibe examinar la misma memoria como valores de dos tipos distintos.

[editar] Ejemplo

#include <iostream>
#include <cstdint>
#include <cstring>
 
int main()
{
    // uso simple
    char source[] = "nada te turbe, nada te espante...", dest[4];
    std::memcpy(dest, source, sizeof dest);
    for (char c : dest)
        std::cout << c << '\n';
 
    // reinterpretando
    double d = 0.1;
//  std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // violación del alias
    std::int64_t n;
    std::memcpy(&n, &d, sizeof d); // de acuerdo
 
    std::cout << std::hexfloat << d << " es " << std::hex << n
              << " como un std::int64_t\n";
}

Salida:

n
a
d
a
0x1.999999999999ap-4 es 3fb999999999999a como un std::int64_t

[editar] Véase también

Mueve un búfer a otro
(función) [editar]
Llena un búfer con un carácter
(función) [editar]
Copia una cierta cantidad de caracteres anchos entre dos arrays que no se superponen
(función) [editar]
Copia un rango de elementos a una nueva ubicación.
(plantilla de función) [editar]
Copia un rango de elementos en orden inverso.
(plantilla de función) [editar]
Comprueba si un tipo es trivialmente copiable.
(plantilla de clase) [editar]