你是对的,它会复制它.但是,memmove和之间存在差异memcpy,因为memmove可以正确处理缓冲区重叠时的情况,因此在这些情况下建议使用.
但是,由于memmove执行了额外的检查,当缓冲区很小并且肯定不重叠时,memcpy更好.
之间的区别memcpy()和memmove()是memmove()始终是安全的来源和目的地之间使用,无论走样.就好像memmove()先将数据复制到临时缓冲区然后再复制到目的地. memcpy()不提供任何别名保证.它可能按预期工作,但也许不行.如果你知道缓冲区不能重叠,那memcpy()很好,并且可以在任何给定的库中使用允许它更快的优化memmove().在另一个库memcpy()实际上可能只是memmove().
如果你知道src和dst不能是别名,那么它是安全的memcpy().如果您不知道哪一个适用于您,请使用memmove().
该函数是这样命名的,因为如果被复制的内存区域确实发生重叠,则它不再是副本,因为原始缓冲区不再是未更改的.因此,原始缓冲区应被视为不可用.由于您使用的是memmove而不是memcpy,因此可能就是这种情况.因此,命名是有意义的:从语义上讲,您正在移动数据而不是复制数据.