The function memmove
is defined like this:
void *memmove(void *dest, const void *src, size_t n);
In the Linux manual page, it says:
RETURN VALUE
The memmove() function returns a pointer to dest.
Why isn't the function just defined as void memmove(…)
when it always returns one of the input parameters? Can the return value be different from dest
?
Or is the return value really always dest
and it is just done to be able to compose the function in some creative ways?
In the C Programming Language, the memmove function copies n characters from the object pointed to by s2 into the object pointed to by s1. It returns a pointer to the destination. The memmove function will work if the objects overlap.
C library function - memmove() The C library function void *memmove(void *str1, const void *str2, size_t n) copies n characters from str2 to str1, but for overlapping memory blocks, memmove() is a safer approach than memcpy().
memmove() is used to copy a block of memory from a location to another. It is declared in string.h. // Copies "numBytes" bytes from address "from" to address "to" void * memmove(void *to, const void *from, size_t numBytes);
memmove
will never return anything other than dest
.
Returning dest
, as opposed to making memmove
void, is useful when the first argument is a computed expression, because it lets you avoid computing the same value upfront, and storing it in a variable. This lets you do in a single line
void *dest = memmove(&buf[offset] + copiedSoFar, src + offset, sizeof(buf)-offset-copiedSoFar);
what you would otherwise need to do on two lines:
void *dest = &buf[offset] + copiedSoFar; memmove(dest, src + offset, sizeof(buf)-offset-copiedSoFar);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With