Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.87 KB | None | 0 0
  1. void *memmoveCustom(void *dest, const void *src, size_t n)
  2. {
  3.     // Converte os ponteiros void pra ponteiros char
  4.     // Assim vc consegue usar aritmética de ponteiro (++, +1) pra andar de byte em byte
  5.     unsigned char *pd = (unsigned char *)dest;
  6.     const unsigned char *ps = (unsigned char *)src;
  7.  
  8.     // Se src é menor que destino, onde os 2 podem overlap
  9.     if ( ps < pd ) {
  10.         // Inicializa os ponteiros src e dest com a ultima posição a ser copiada
  11.         // dessa forma vc copia em reverso, do ultimo pro primeiro
  12.         pd += n;
  13.         ps += n;
  14.  
  15.         while (n--) {
  16.             // Enquanto n for > 0, copia cada item, move pro anterior (--) e decrementa o valor de n
  17.             *--pd = *--ps;
  18.         }
  19.     } else
  20.         // Senão simplemente copia um pro outro no sentido normal
  21.         while(n--)
  22.             *pd++ = *ps++;
  23.     return dest;
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement