在实现memmove函数时,需要注意目标和源头两部分在内存中的位置关系,因为memmove函数是可以重叠内存区域的。
目标区域和源区域的位置关系可以分为三种。
第一种:目标的内存位置小于源内存位置,在移动源数据时选择从前向后的方式进行移动。
第二种:目标的内存位置大于源内存位置,在移动源数据时选择从前向后的方式进行移动。
第三种:目标区域与源区域重叠,并且目标的内存位置大于源内存位置。在移动源数据时选择从后向前的方式进行移动。
按照以上三种方式移动源数据,就不会出现还未移动,数据就已经被覆盖的情况。
具体实现程序如下: