std::memcpy
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) | |
Llena un búfer con un carácter (función) | |
Copia una cierta cantidad de caracteres anchos entre dos arrays que no se superponen (función) | |
(C++11) |
Copia un rango de elementos a una nueva ubicación. (plantilla de función) |
Copia un rango de elementos en orden inverso. (plantilla de función) | |
(C++11) |
Comprueba si un tipo es trivialmente copiable. (plantilla de clase) |
Documentación de C para memcpy
|