Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

196
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda