首页 > 其他分享 >strcpy和memcpy的区别

strcpy和memcpy的区别

时间:2024-03-11 10:46:05浏览次数:36  
标签:区别 dest char strcpy memTo 复制 memcpy

本质区别

strcpy和memcpy都是标准C库函数,它们有下面的特点。

  • strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

  • memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

strcpy函数源码(C语言)

char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{
  if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
  {
      return NULL;
  }
  char *strdest = dest;        //保存目标字符串的首地址
  while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下
  return strdest;
}

memcpy函数源码(C语言)

void *memcpy(void *memTo, const void *memFrom, size_t size)
{
  if((memTo == NULL) || (memFrom == NULL))     //memTo和memFrom必须有效
         return NULL;
  char *tempFrom = (char *)memFrom;             //保存memFrom首地址
  char *tempTo = (char *)memTo;                  //保存memTo首地址      
  while(size -- > 0)                //循环size次,复制memFrom的值到memTo中
         *tempTo++ = *tempFrom++ ;  
  return memTo;
}

总结

strcpy和memcpy主要有以下3方面的区别。

  1. 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

  2. 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

  3. 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

标签:区别,dest,char,strcpy,memTo,复制,memcpy
From: https://www.cnblogs.com/keep--fighting/p/18065552

相关文章

  • Unity3D中刚体、碰撞组件、物理组件的区别详解
    Unity3D提供了丰富的功能和组件,其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用,能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也......
  • Kubernetes Replica Sets 和 Kubernetes Replica Controller的区别
    ReplicaSet(RS)是ReplicationController(RC)的升级版本。ReplicaSet和 ReplicationController之间的唯一区别是对选择器的支持。ReplicaSet支持labelsuserguide中描述的set-based选择器要求, 而ReplicationController仅支持equality-based的选择器要求。标签选择器用来选择包......
  • k8s中port-forward 与service的nodeport区别
    在Kubernetes中,port-forward和Service的NodePort是两种将外部流量引入集群内部Pod的方法,但它们在实现方式、使用场景和安全性等方面有所不同。port-forward:实现方式:kubectlport-forward命令允许你将本地机器上的一个端口转发到Kubernetes集群中的一个Pod上的端口。这是一种......
  • 酷睿i5与i7处理器有什么区别
    本文将深入解析酷睿i5与i7处理器的区别,帮助您做出明智的购买决策。购买笔记本之前,了解处理器相关知识至关重要。处理器作为电脑的核心部件,其性能直接影响整机运行速度和效率。市面上主流的笔记本处理器包括酷睿i5和i7两款,i5与i7之间存在着一些关键差异,主要体现在以下几个方面。......
  • Lua中pair和ipair的区别
    Lua中pair和ipair的区别?二者都是Lua中内置的迭代器,可以对数组或table进行遍历。在正常的数组或table的遍历中,二者没有区别。tableNormal={"this","is","a","array"}--使用pairs遍历forkey,valinpairs(tableNormal)doprint(key,'==',val)end遍历结果:--使用......
  • SQL语句On和Where语句的区别
    前面我们讲解了Join的底层驱动表选择原理,也知道了基本的内连接外连接两种SQL查询表连接方式但是我们再查询多表的时候on和where语句到底有什么区别?where是过滤条件,不满足where的一定不会出现在结果中on是连接条件,对于内连接来说on和where效果一致对于外连接来说,如果在被......
  • Basic认证和Bearer Token认证的区别
    前端发送POST请求服务器端数据时,通过使用两种认证方式:【1】Basic用户名密码认证 【2】Bearertoken认证这两种都是在请求头中存放:Authorization 认证信息 来请求服务端,服务端通过校验认证信息的正确性来判断用户的身份是否合法,那这两种有啥区别呢?? Basictoken和Beare......
  • fink泛型参数问题和TypeHint TypeInformation Types区别
    TypeHint,TypeInformation,Types区别TypeInformation是flink的类型定义,TypeHint是描述用于描述泛型参数的辅助类,Types是一个封装了常用TypeInformation的工具类描述问题下面一段代码的有两个参数,第一个来自数据流元素,他的本质是入参。第二个是出参,效果和返回值类似第一个参......
  • 负载均衡四层与七层的区别
    首先提一个缩写OSI,这个学计算机网络的再熟悉不过了,不过时间已久可能就不是那么有印象了,可能这个缩写都已经不认识了。OSI:OpenSystemInterconnection,开放系统互联。它是国际化标准组织制定的计算机互相联络的协议模型,也就是说要想通过计算机互相连接,那么请按照这个标准来进行。......
  • python面试题 :进程、线程、协程的区别
    进程、线程和协程区别1.进程进程是系统资源分配的最小单位,系统由一个个进程(程序)组成一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动......