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);
Below is a sample C program to show the working of memmove().
str1 before memmove Geeks str1 after memmove Quiz
How is it different from memcpy()?
memcpy() simply copies data one by one from one location to another. On the other hand memmove() copies the data first to an intermediate buffer, then from the buffer to destination.
memcpy() leads to problems when strings overlap.
For example, consider below program.
Since the input addresses are overlapping, the above program overwrites the original string and causes data loss.
Consider the below program for understanding the difference between the memcpy and memmove function in case of overlapping happens.
Original string :Learningisfun memcpy overlap : LearningLearningis memmove overlap : LearningLearningLe
As you can see clearly with memmove function whenever overlap happens (i.e when the first pointer moves to the character ‘i’) then the first pointer will start to print from the beginning (output Le) but with memcpy function, it just ignores if there is an overlap and just keep moving forward.
Write your own memcpy() and memmove()?
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above