Namespaces
Variants

std:: memmove

From 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.

Contenidos

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 a otro
(función)
llena un búfer con un carácter
(función)
copia 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)
copia un rango de elementos en orden inverso
(plantilla de función)
verifica si un tipo es trivialmente copiable
(plantilla de clase)
Documentación C para memmove