当前位置: 首页 > news >正文

关于strcpy()与memcpy()比较

在使用这两个函数中,平时大多都使用strcpy()而忽略了memcpy(),它们都是从缓冲区拷贝内容。

byte a[4];// 每一个字节赋数值类型
 a[0]=0;
 a[1]=1;
 a[2]=0;
 a[3]=1;

 byte c1[4];
 memcpy(c1, a, sizeof(byte)*4);
 byte c2[4];
 strcpy((char*)(byte*)c2, (char*)(byte*)a);

只有memcpy()处理的是正确的,所以拿来它们的函数原型比较一下:

char *strcpy( char *strDest, const char *strSource);

void *memcpy( void *dest, const void *src, size_t count );

可以看出 strncpy() 是处理的字符串(遇零结束),memcpy()是处理一个缓冲区(void*类型的),而我们的内容中有数字0,而数字0又是字符串的结尾字符 ' \0' 的数字表现,字符串拷贝是遇到0就结束,所以,如果要拷贝的缓冲区如果是非字符串那么就尽量用memcpy(),这样可以避免出错的可能。
-------------------------------------------------------------------------
void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
 assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言
 byte *pbTo = (byte *) pvTo; // 防止改变pvTo 的地址
 byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom 的地址
 
 while(size -- > 0 )
  *pbTo ++ = *pbFrom ++ ;
 
 return pvTo;
  
}


char *strcpy(char  *strDest, const char  *strSrc)
{
  assert((strDest != NULL) && (strSrc != NULL));
 
 char *address = strDest;
 while ((*strDest++ = *strSrc++) != '')
  continue;
  
 return address;

转载于:https://www.cnblogs.com/xinqqing83/archive/2006/11/06/551535.html

相关文章:

  • C#读U盘的文件
  • 推荐:体验TechEd 2006 Europe Edition
  • 安装Vista前你应该知道的十件事
  • 硕士生与大专生
  • 为什么要注册域名?
  • 详细设计说明书
  • Linux下添加硬盘,分区,格式化
  • 对 Web user controls 和 Web custom controls 的一些建议
  • Asp.net 2.0 使用FormView + ObjectDataSource 或 SqlDataSource 插入记录后 定位到被插入行...
  • 发布一个实用美观的Vista Sidebar Gadget (代表博客园参赛)
  • linux 内存相关~~~~集~~
  • task Scheduler
  • WebLogic Server 性能调优
  • 谈谈工作流
  • VSTS 启动web测试记录器无效
  • bootstrap创建登录注册页面
  • Bytom交易说明(账户管理模式)
  • CSS 专业技巧
  • css布局,左右固定中间自适应实现
  • docker python 配置
  • express.js的介绍及使用
  • Java程序员幽默爆笑锦集
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Redux系列x:源码分析
  • 后端_MYSQL
  • 每天10道Java面试题,跟我走,offer有!
  • 强力优化Rancher k8s中国区的使用体验
  • 小程序开发之路(一)
  • 一起参Ember.js讨论、问答社区。
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #、%和$符号在OGNL表达式中经常出现
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (原創) 物件導向與老子思想 (OO)
  • .form文件_一篇文章学会文件上传
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET下ASPX编程的几个小问题
  • .NET运行机制
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • []常用AT命令解释()
  • [Android] Upload package to device fails #2720
  • [Android]创建TabBar
  • [Android]使用Git将项目提交到GitHub
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [Django 0-1] Core.Handlers 模块
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [LeetCode]—Rotate Image 矩阵90度翻转
  • [Oh My C++ Diary]类继承和类组合(内嵌类)初始化的不同
  • [python 刷题] 2866 Beautiful Towers II
  • [Real world Haskell] 中文翻译:第三章 定义类型,流式函数
  • [webpack] devtool里的7种SourceMap[转]