strcpy和memcpy的区别

2023-11-08

1 strcpy函数
1.1 函数原型
char strcpy(char dest, const char src);
1.2 函数功能
strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char

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

2 memcpy函数
2.1 函数原型
void *memcpy(void *str1, const void *str2, size_t n);
2.2 函数功能
C 库函数memcpy从存储区str2复制n个字节到存储区str1。

3 两个函数的区别
3.1 复制的内容
strcpy只能复制字符串,而memcpy是内存拷贝,可以复制任意内容,例如:字符数组、整形、结构体、类等。
3.2 复制的方法不同
strcpy不需要指定长度,它遇到被复制字符串结束符‘\0’才结束,所以容易溢出。memcpy则是根据其第三个参数决定复制的长度。
3.3 用途不同
通常复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

4 函数源码实现
4.1 模拟实现strcpy函数

char* my_strcpy(char* dest, const char* src)
{
		if(src == NULL || dest == NULL)
		{
				return NULL;
		}
		
		char *str = dest;
		while(*src != '\0')
		{
			 *dest++ = *src++;
		}
		
		return str;
}

4.2 模拟实现memcpy函数

void *my_memcpy(void* dest, const void* src, size_t size)
{
		if(dest == NULL || src == NULL)
		{
				return NULL;
		}
		
		char *tempdest = (char*)dest;
		char *tempsrc = (char*)src;
		while(size > 0)
		{
				*tempdest++ = *tempsrc++;
				size--;
		}
		return dest;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

strcpy和memcpy的区别 的相关文章

随机推荐

  • angular请求的防抖(debounce)

    在开发项目过程中 我们会遇到这样的场景 当用户在搜索框中输入名字时 当用户输入完毕后 自动发送搜索请求 实时响应 而不是多按一个按钮或者回车键 如果按照常规思路 我们会绑定input的keyup事件 每次击键后 执行相对应的请求函数 但是
  • MyBatis 3 提示 Column ‘******‘ specified twice

    造成错误的原因是 Mapper xml 配置文件 insert 语句写入重复字段 错误配置文件展示
  • 如何进行本地分支管理

    文章目录 如何进行本地分支管理 Git进行分支管理 显示分支一览表 创建分支 转到新创建的分支 创建分支并转到新创建的分支 分支合并 删除分支 冲突合并 Tortoise进行分支管理 显示分支 创建分支 切换分支 分支合并 冲突合并 VS2
  • 绕过__chkesp堆栈检查

    前面很多注入相关的文章中都提到为了保证注入后原始程序能恢复正常的执行流 需要在编译器中关闭堆栈检查 为了解决问题 这是个好手段 但是不得不说这是回避问题 不是根本上解决问题 本文旨在解决这个问题 vs用 chkesp来实现堆栈检查 chke
  • 工业制造业亟需数字化转型,区块链可以发挥哪些价值?

    智能信息化技术驱动的第四次工业革命正推动制造业积极拥抱物联网 云计算等新技术进行数字化 智能化转型升级 制造业是一个纷繁复杂的庞大网络 不仅涉及机器 零件 产品等实体还有机器制造商 物流公司 销售等诸多利益相关方 在当今数字化时代中 如何帮
  • 如何防止小人对你的网站进行反向代理

    引言 如果是小站或者刚建立的站 则不用担心 但如果有名气了 便可能出现小人反代你的网站 做成所谓的 镜像站点 盗版站点 这篇文章就是介绍如何防止一些简单的反代小人 实施方法 一 使用 htaccess禁止反向代理 在站点根目录下新建 hta
  • android根据物理按键上下选中listview的item,回车进入点击相应事件

    最近做扫码枪程序 因应用于冷库 用户需求在列表选择上可以用上下键代替滑动 所以做了一个小demo 记录一下 话不多说 直接上代码 1 布局文件很简单 主界面 一个输入框一个列表 因为是手持采集枪 输入框经常用到 所以在做demo的时候也加上
  • Mac终端(Terminal)自定义颜色,字体,背景 & Mac系统如何显示隐藏文件?& mac下载gcc并测试

    Mac终端 Terminal 自定义颜色 字体 背景 1 打开终端 输入 git clone git github com altercation solarized git下载Solarized 2 clone完成后 打开 然后打开 3
  • 矩阵乘法复杂度分析

    一 背景 在很多机器学习或者数据挖掘论文中 里面或多或少的涉及到算法复杂度分析 进一步思考 是如何得到的呢 很长时间里 我也感受到比较疑惑 阅读论文过程中 在涉及到这部分内容时 会直接跳过算法复杂度分析这快 其一是因为比较烧脑 虽然知道复杂
  • OpenFeign中动态URl、动态传递接口地址

    前言 在微服务盛行的今天 做接口开发请求第三方服务的接口 大概率会用feign做请求 而feign也是最常用的一种rpc框架 这里主要是说明在进行feign请求的时候 第三方服务的url和接口如何动态获取 若是该接口是作为基础服务可能会请求
  • IDEA开启后,设置工作空间位置

    欢迎加群 854228077 帮助更多java程序员提升技术 资料多 大佬多 第一步 打开IDEA
  • js中对象与函数的关系

    问题引入 new Function msg alert msg 分析某源码的时候看到这样一段代码 突然一个问题萌发了 js中对象与函数到底有什么样的关系 首先看几段代码 function test console log test inst
  • 最适合零基础学的爬虫案例,利用Python采集静态网站数据。

    前言 大家晚上好 我看到评论区有很多的零基础小白 是不怎么懂爬虫的 那么今天就教大家一个最适合新手小白的爬虫教程 就是抓取静态网站的数据 非常简单 废话不多说 直接上干货 首先如果我们想拿出来这个网址上有用的图片地址并下载下来 那就要用到了
  • RocektMQ社区"每周直播分享第7期"如约而至

    各位同学 RocektMQ社区 每周直播分享第7期 如约而至 分享题目 RocketMQ消息消费概述 直播方式 钉钉群直播方式 群号 21791227 分享时间 2019 01 17 20 00 21 30 本周四 分享讲师 费红健 内容简
  • POJ 1062 昂贵的聘礼

    题面 年轻的探险家来到了一个印第安部落里 在那里他和酋长的女儿相爱了 于是便向酋长去求亲 酋长要他用10000个金币作为聘礼才答应把女儿嫁给他 探险家拿不出这么多金币 便请求酋长降低要求 酋长说 嗯 如果你能够替我弄到大祭司的皮袄 我可以只
  • linux安装rocketmq(有效)

    1 基于java maven环境搭建 linux java 搭建 linux安装java1 8 拒绝 emo的博客 CSDN博客 linux maven搭建 linux安装maven3 2 2 拒绝 emo的博客 CSDN博客 2 下载 A
  • 七大排序算法的基本原理及实现

    目录 1 排序的概念及引用 1 1 排序的概念 1 2 常见的排序算法 2 常见排序算法的实现 2 1 基于选择的思想 2 1 1 直接选择排序 2 1 2 堆排序 2 2 基于插入的思想 2 2 1 直接插入排序 2 2 2 希尔排序 缩
  • pycharm连接MYSQL数据库

    pycharm连接MYSQL 1 gt 使用pip工具 进入cmd 输入 pip install pymysql 回车进行安装 有网络的情况下进行 安装最新版的pymysql可以使用 python m pip install upgrade
  • 希尔排序(Shell Sort)

    如今是大数据时代 大量数据需要处理 便越来越需要跟优秀的算法 算法 Algorithm 是指解题方案的准确而完整的描述 是一系列解决问题的清晰指令 算法代表着用系统的方法描述解决问题的策略机制 也就是说 能够对一定规范的输入 在有限时间内获
  • strcpy和memcpy的区别

    1 strcpy函数 1 1 函数原型 char strcpy char dest const char src 1 2 函数功能 strcpy是一种C语言的标准库函数 strcpy把含有 0 结束符的字符串复制到另一个地址空间 返回值的类