Both memcpy and memmove () are library functions in C language. In the header file string. H, the function is to copy the memory content of a certain length. The prototype is as follows:
Void * memcpy (void * DST, const void * SRC, size_t count );
Void * memmove (void * DST, const void * SRC, size_t count );
|
They play the same role. The only difference is that when the memory partially overlaps, memmove ensures that the copied results are correct, and memcpy does not guarantee that the copied results are correct.
In the first case, copying overlapping areas will not cause problems, and the content can be correctly copied.
In the second case, the problem occurs in the two bytes on the right. The original content of the two bytes is overwritten and not saved. Therefore, during the next copy, the copied content is overwritten, which is obviously problematic.
In fact, memcpy is only a subset of memmove.
The C language implementation of the two is very simple. If you are interested, you can check it out. In actual situations, both functions are implemented by assembly.