memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。
它的原型是:
void memmove( void dest, const void src, size_t count );*
注意:
1、它的返回值是void*,参数类型也是void*,这样它才可以处理不同类型的数据。
2、目标dest不能加const,源src加const。原因是我们需要从源src中拷贝数据到dest中,需要对dest进行赋值。若用const保护 dest,便不能完成赋值操作。
memmove的好处是可以处理dest与src发生内存重叠的情况,具体自行查阅资料。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h> void *my_memmove(void dest,const void src,int n) {
/因为char类型为1字节,所以将数据转化为char 进行操作。并不是因为操作的对象是字符串/ char
pdest=(char )dest;
const char psrc=(const char *)src;
assert(dest);
assert(src);
if(pdest <= psrc&&pdest >=psrc+n)
//正常情况下从前向后拷贝 {
while(n–