您的位置:首页 > 其它

memcpy 函数

2015-09-26 09:03 423 查看
1、memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制

拷贝的字节数;

函数原型:void *memcpy(void *dest, void *src, unsigned int count);

用法:(1)可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可以是int*,short*,char*等等,

但是由于函数拷贝的过程是一个字节一个字节的拷贝的,所以实际操作的时候要把void*强制转化为char*,这样在指针加的时候才会保证每次加一个字节,呵呵

函数源代码实现:

void *memcpy1(void *desc,const void * src,size_t size)

{

 if((desc == NULL) && (src == NULL))

 {

  return NULL;

 }

 unsigned char *desc1 = (unsigned char*)desc;

 unsigned char *src1 = (unsigned char*)src;

 while(size-- >0)

 {

  *desc1 = *src1;

  desc1++;

  src1++;

 }

 return desc;

}

int _tmain(int argc, _TCHAR* argv[])

{

 int dest[2] = {0};

 const char src[5] = "1234";

 //printf(src);

 memcpy1(dest,src,sizeof(src));

 //*(dest+5) = '/0';

 printf((char *)dest);

 int m = -1;

 return 0;

}

注意事项:(1)void* 一定要返回一个值(指针),这个和void不太一样!

          (2)首先要判断指针的值不能为空,desc为空的话肯定不能拷贝内存空间,src为空相当于没有拷贝;所以之间return掉;

          (3)""空串是指内容为0,NULL是0,不是串;两个不等价;

          (4)int dest[2] = {0};这是对int 类型的数组初始化的方法;如果是char类型,就用char a[5] = "1234";  注意数组下标要

               多于实际看到的字符数,因为还有'/0'

          (5)printf((char *)dest);这句话,是把 char 类型 src 传到 int 类型的 dest的内存强制转化成char类型,然后打印出来;

               因为直接看int类型的dest是看不到里面的内容的;因为有unsigned char *desc1 = (unsigned char*)desc;所以字符可以传

               到dest里面保存起来,dest所指向的内存长度4个字节,强制转化为char 就是把四个字节分成一个一个的字节,这样就可以看到

               一个个字符了,如果定义成char dest[5] = "1234";就不用转化;呵呵,表达起来真累人;

          (6)memcpy1(dest,src,sizeof(src));注意里面的sizeof(src),这个是包括字符串的结束符'/0'的;所以不用担心printf(dest);

               但是如果用memcpy1(dest,src,4);没有'/0'就要*(dest+5) = '/0';这样保证是一个完整的字符串;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: