深入理解strcpy与memcpy的区别
发布时间:2023-02-23 21:45:32
标签:c语言,strcpy,memcpy
strcpy与memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count );
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;
}
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


猜你喜欢
- 使用 LogcatLogcat是日常开发的重要组成部分。如果您看到其中一个“强制关闭”或&l
- 本文章向大家讲解java中时间的获取和格式化, 一. 获取当前系统时间和日期并格式化输出:import java.util.Dat
- Java中存在着两种Random函数:java.lang.Math.Random;调用这个Math.Random()函数能够返回带正号的do
- 在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事。今
- 一. * 搭建及配置1 . * 简介 * 是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了 * 之后,当 Maven
- 一、insert1.插入操作public class CRUDTests { @Autowired
- 1,在项目上鼠标右键 --> Open Module Settings2, Artifacts --> + --> JAR
- ActiviryThreadActivityThread的初始化ActivityThread即Android的主线程,也就是UI线程,Act
- 写在前面并发编程一直都存在,只不过过去的很长时间里,比较难以实现,随着互联网的发展,人口红利的释放,更加友好的支持并发编程已经成了主流编程语
- 本文考虑把账单界面整理下,实现如下图中的功
- 今天接触了一下ToStringBuilder类,这里做一个备忘。ToStringBuilder在包 common-lang 中,主要用于一个
- 环境IDEA :2020.1Maven:3.5.6SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不同,版本适配问题,为配
- 最近有个需求是这样的,人民币的符号“¥”因为安卓手机系统的不一致导致符号不是完全一样,所以用美工的给的图片代替,考虑到用的地
- 前言今天在做新需求的时候,活动有多个类型可以选择,UI给的设计图为多行多列排版,且单项选择,细细想来,谷歌并没有为我们提供类似的控件,初步设
- 场景:在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工
- 1.类的属性 filed1)在kotlin中定义属性,必须赋初始值,要不编译器检查不通过。这个和java不同2)kotlin会针对于定义的每
- 两个对象进行比较相等,有两种做法:1、情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明2、情况二:
- 一、静态静态的定时任务可以直接使用注解@Scheduled,并在启动类上配置@EnableScheduling即可@PostMapping(
- 先给大家展示下效果图,感觉不错请参考实例代码。实现思路在flutter中,如果想实现上面的页面切换效果,必然会想到pageView。page
- 本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下自己写的数独游戏,共9关,代码如下:1、DoShudu类用于产生数独