twzheng's cppblog

『站在风口浪尖紧握住鼠标旋转!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  136 随笔 :: 78 文章 :: 353 评论 :: 0 Trackbacks

关于strcpy()与memcpy()比较

举例:

{

byte a[4];// 每一个字节赋数值类型

byte c1[4];

byte c2[4];

memcpy(c1, a, sizeof(byte)*4); //正确使用

strcpy((char*)(byte*)c2, (char*)(byte*)a);//错误调用

}

函数原型

   strcpy

   extern char *strcpy(char *dest,char *src);

   #include <string.h>

   功能:把src所指由NULL结束的字符串复制到dest所指的数组中

   说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

   返回指向dest的指针



  memcpy

  extern void *memcpy(void *dest,void *src,unsigned int count);

  #include <string.h>

   功能:由src所指内存区域复制count个字符串到dest所指内存区域.

   说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针.函数原型

 

关于memcpy的用法

作用:在dest处拷贝src处的字节,并以count来计算需要拷贝的字节数量,进行内存的拷贝。

参数: dest:新的存贮区的开始部位   src:需要拷贝的开始部位    count:需要拷贝的字节数备注:dest,src,它们都是从各自的地址处进行写入,如果是p而不是&p,那么奖会取得p的值(地址),在该值的地址处进行读出或写入。

例:  

int* intPoint = new int(3333);  

int* intPoint1;  

//在intPoint1的地址处写入intPoint地址处的值,也就是intPoint指针值。 

memcpy( &intPoint1, &intPoint, 4 );

//使intPoint1指向了intPoint. 或   int* intPoint = new int(3333);

cout << *intPoint1 << endl;

可以看出 strcpy() 是处理的字符串(遇零结束),memcpy() 是处理一个缓冲区(void*类型的),而我们的内容中有数字0,而数字0又是字符串的结尾字符 ' \0' 的数字表现,字符串拷贝是遇到0就结束,所以,如果要拷贝的缓冲区如果是非字符串那么就尽量用memcpy(),这样可以避免出错的可能。

posted on 2007-06-13 20:57 谭文政 阅读(2082) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理