memcpy() and memmove()
memcpy does a mindless copy, regardless of whether there are shared bytes between the source and destination:
  void *memcpy (void *dst, const void *src, size_t n) {    char *a = dst;    const char *b = src;    while (n--) {     *a++ = *b++;}
   return dst; }memmove does backward copy  and takes care of overwritten value of shared bytes:void *memmove(void *dst, const void *src, size_t n) {  char *a = dst;  const char *b = src; if (a <= b || b >= (a + n)) {/* No overlap, use memcpy logic or can use memcpy itself(copy forward) */  while (n--)  *a++ = *b++;}else {  /* Overlap! Copy backward to fix */  a = a + n - 1;  b = b + n - 1;while (n--)  *a-- = *b--;  }  return dst;}  
 
