Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

194
Vistas
Eliminación usando memcpy en una matriz

Dado un índice y una matriz de enteros, necesito eliminar el elemento en la matriz dada que se almacenó en el índice dado mediante el uso de memcpy() . El nuevo conjunto de elementos se almacenará en la matriz dada.

Aquí hay una ilustración de lo que quiero hacer, aunque tengo problemas para implementarlo.

ingrese la descripción de la imagen aquí

Entonces arrayElem después de eliminar 10 se vería así:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No puede usar memcpy , porque el origen y el destino se superponen, pero puede usar memmove , por ejemplo:

 memmove(&a[1], &a[2], 5 * sizeof(a[0]));

Esto copia los 5 elementos que comienzan en a[2] hasta los 5 elementos que comienzan en a[1] , cuidando el hecho de que las regiones de origen y destino se superponen.

over 4 years ago · Santiago Trujillo Denunciar

0

No puede usar la función memcpy porque los rangos de la matriz se superponen entre sí. En este caso el comportamiento será indefinido.

En su lugar, debe usar la función estándar memmove .

Aquí hay un programa demostrativo.

 #include <stdio.h> #include <string.h> size_t remove_by_index( int a[], size_t n, size_t i ) { if ( i < n ) { memmove( a + i, a + i + 1, ( n - i - 1 ) * sizeof( *a ) ); --n; } return n; } int main( void ) { int a[] = { 1, 10, 5, 8, 4, 51, 2 }; const size_t N = sizeof( a ) / sizeof( *a ); size_t n = N; for ( size_t i = 0; i < n; i++ ) printf( "%d ", a[i] ); printf( "\n" ); n = remove_by_index( a, n, 1 ); for ( size_t i = 0; i < n; i++ ) printf( "%d ", a[i] ); printf( "\n" ); return 0; }

La salida del programa es

 1 10 5 8 4 51 2 1 5 8 4 51 2
over 4 years ago · Santiago Trujillo Denunciar

0

No puede hacer esto usando memcpy() en la misma matriz . Necesitas usar memmove() .

Para citar la página de manual de memcpy()

La función memcpy() copia n bytes del área de memoria src al área de memoria dest . Las áreas de memoria no deben superponerse. Use memmove(3) si las áreas de memoria se superponen.

Ref: memmove()

Sin embargo, si usa una matriz temporal, entonces, en 2 pasos, puede lograr esto usando memcpy() , como

  • memcpy() la parte requerida de su matriz dada a la matriz temporal
  • memcpy() devuelve la matriz temporal a la matriz dada a partir del índice requerido.

FWIW, ninguno de los enfoques anteriores borrará el valor en el índice 6. El valor existente estará presente. Tienes que hacerlo manualmente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda