Namespaces
Variants

std:: memmove

From es.cppreference.net
Definido en el encabezado <cstring>
void * memmove ( void * dest, const void * src, std:: size_t count ) ;

Realiza las siguientes operaciones en orden:

  1. Crea implícitamente objetos en dest .
  2. Copia count caracteres (como si fueran de tipo unsigned char , lo mismo a continuación) desde el objeto apuntado por src hacia un arreglo temporal arr de count caracteres, donde arr no se superpone con los objetos apuntados por dest y src .
  3. Copia count caracteres desde arr hacia el objeto apuntado por dest .

Si dest o src es un puntero nulo o un puntero inválido , el comportamiento es indefinido.

Contenido

Parámetros

dest - puntero a la ubicación de memoria donde copiar
src - puntero a la ubicación de memoria desde donde copiar
count - número de bytes a copiar

Valor de retorno

Si hay un objeto creado adecuado , devuelve un puntero al mismo; de lo contrario devuelve dest .

Notas

A pesar de que la especificación dice que se utiliza un búfer temporal, las implementaciones reales de esta función no incurren en la sobrecarga de doble copia o memoria adicional. Para count pequeños, puede cargar y escribir registros; para bloques más grandes, un enfoque común (glibc y bsd libc) es copiar bytes hacia adelante desde el principio del búfer si el destino comienza antes del origen, y hacia atrás desde el final en caso contrario, con una alternativa a std::memcpy cuando no hay superposición alguna.

Donde strict aliasing prohíbe examinar la misma memoria como valores de dos tipos diferentes, std::memmove puede utilizarse para convertir los valores.

Ejemplo

#include <cstring>
#include <iostream>
int main()
{
    char str[] = "1234567890";
    std::cout << str << '\n';
    std::memmove(str + 4, str + 3, 3); // copia desde [4, 5, 6] a [5, 6, 7]
    std::cout << str << '\n';
}

Salida:

1234567890
1234456890

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 4064 C++98 no estaba claro si el puntero retornado apunta a un objeto creado adecuadamente aclarado

Véase también

copia un búfer en otro
(función)
rellena un búfer con un carácter
(función)
copia una cierta cantidad de caracteres anchos entre dos arreglos, posiblemente superpuestos
(función)
copia un rango de elementos a una nueva ubicación
(plantilla de función & objeto de función de algoritmo)
copia un rango de elementos en orden inverso
(plantilla de función & objeto de función de algoritmo)
comprueba si un tipo es trivialmente copiable
(plantilla de clase)
documentación de C para memmove