Espacios de nombres
Variantes
Acciones

std::memcpy

De cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Definido en el archivo de encabezado <cstring>
void* memcpy(void* dest, constvoid* 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 unsignedchar.

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 simplechar source[]="nada te turbe, nada te espante...", dest[4]; std::memcpy(dest, source, sizeof dest);for(char c : dest)std::cout<< c <<'\n';   // reinterpretandodouble d =0.1;// std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // violación del aliasstd::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]
close