c/c++拷贝函数

memcpy()函数

  • 概要
原型
void * memcpy ( void * dest, const void * src, size_t num );
功能

memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上(memcpy()并不关心

被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据

类型进行复制

注意

1.dest 指针要分配足够的空间,也即大于等于 num字节的空间。
2.dest 和 src所指的内存空间不能重叠(重叠可能会导致拷贝数据错误)

3.memcpy拷贝结束后不会给dest末尾添加‘/0’

4.memcpy 不会检查 src 或 dest 的实际内存边界,它只是机械地复制 num 字节(num大于小于dest和

src的长度都不会阻止),在vs2022会报警告。

返回值返回指向 dest 的指针。注意返回的指针类型是void*,使用时一般要进行强制类型转换。
  • 举个例子
int main() 
{const char* p1 = "HEllO";char* p2 = (char*)malloc(sizeof(char) * 10);char* p3 = (char*)memcpy(p2, p1, 6);cout << p3 << endl;
}

 memmove函数

  •  概要
原型
void *memmove(void *dest, const void *src, size_t num);
功能memmove()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上
注意

1.memmove() 更为灵活,当src 和 dest所指的内存区域重叠时,memmove() 仍然可以正确的处理,

不过执行效率上会比使用 memcpy()略慢些。(处理方式就是如果src长度小于dest,就从头开始复制

,如果src长度大于dest,就从后往前复制,这样就可以保证内存区域重叠时正确复制

2.memmove的特性基本上和memcpy一致。

返回值

返回指向 dest 的指针。注意返回的指针类型是void,使用时一般要进行强制类型转换

  • 举个例子
int main() 
{char str[] = "memmove can be very useful......";memmove(str + 20, str + 15, 11);puts(str);return 0;
}

strcpy()函数

  • 概要
原型
char*strcpy(char *dest, const char *src);
功能

strcpy() 把src所指的由"/0"结束的字符串复制到dest 所指的数组中,返回指向dest 字符串的起始地址

(连同"/0")

注意

1.如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(bufferOverflow)的错误情况,在编写

程序时需要特别留意,或者用strncpy()来取代

2.strcpy 不会检查 src 或 dest 的实际内存边界,它只是机械地复制,在vs2022中超出边界会程序

崩溃

返回值指向dest 字符串的起始地址

 

  • 举个例子 
int main() 
{char str1[] = "Sample string";char str2[8];char str3[40];strcpy(str2, str1);strcpy(str3, "copy successful");printf("str1: %s\nstr2: %s\nstr3: %s\n", str1, str2, str3);return 0;}

strncpy()函数

  • 概要
原型
char *strncpy(char *dest, const char *src, size_t n);
功能 strncpy()会将字符串src前n个字符拷贝到字符串dest,n也表示最多复制n个字符。
注意

1.不像strcpy(),strncpy()不会向dest追加结束标记'\0',这就引发了很多不合常理的问题。

2.如果n大于src的长度,会用"/0"填充dest。

返回值指向dest 字符串的起始地址
  • 举个例子
int main(void)
{char dest3[100] = "xxxxxxxxxxxxxxxxxxxxxxxxx";const char src3[6] = "abcxy";int n3 = 20;strncpy(dest3, src3, n3); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88408.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP核心基础详解(附实战要点)

目录 一图胜千言&#xff1a;HTTP核心机制图解​编辑 一、HTTP本质&#xff1a;通信的桥梁 二、五大核心特性解析 三、HTTP头部&#xff1a;隐藏的控制中心 四、连接管理&#xff1a;性能关键点 开发者必知实践技巧 一图胜千言&#xff1a;HTTP核心机制图解 一、HTTP本质…

华为静态路由配置

问题描述&#xff1a;针对两台笔记本和两个路由器在不同的网段场景中&#xff0c;对两个路由器进行静态路由配置。下面以如下场景为例&#xff0c;介绍详细配置过程。配置步骤&#xff1a; 1、对每个路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…

闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程文件请关注…

经典排序算法

文章目录前言1. 排序的基本概念1.1 排序是什么&#xff1f;1.2 常见的排序算法概览2. 常见排序算法的实现2.1 插入排序 (Insertion Sort)2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 (Shell Sort)2.2 选择排序 (Selection Sort)2.2.1 直接选择排序2.2.2 堆排序 (Heap Sort…

RabbitMQ 消息队列:从入门到Spring Boot实战

RabbitMQ 作为一款开源的、基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议实现的消息代理&#xff0c;凭借其强大的功能、灵活的路由机制以及出色的性能&#xff0c;在业界得到了广泛的应用。无论是处理高并发订单、异步通知、日志收集还是系统解耦&…

代账行业数字化破局:从“知道”到“做到”,三步走稳赢!

认知&#xff01;降本&#xff01;增收&#xff01;数字化&#xff01;——这不仅是口号&#xff0c;更是代账行业在激烈竞争和时代变化中生存发展的关键。很多代账同行其实都明白趋势&#xff0c;也知道大概该怎么做。但问题卡在第一步&#xff1a;不知道怎么开始&#xff0c;…

Mac 电脑crontab执行定时任务【Python 实战】

1、crontab -e 编辑定时任务列表 crontab -e查看当前定时任务列表,长按 i 编辑,编辑完之后按 esc 退出编辑,然后输入:wq 保存并提出。 如下: (base) charles@zl ~ % crontab -e58 15 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/charle…

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读

go go go 出发咯 - go web开发入门系列&#xff08;三&#xff09; 项目基础框架搭建与解读 往期回顾 go go go 出发咯 - go web开发入门系列&#xff08;一&#xff09; helloworldgo go go 出发咯 - go web开发入门系列&#xff08;二&#xff09; Gin 框架实战指南 前言 如…

【字节跳动】数据挖掘面试题0014:SQL中count(1), count(*), count(列)区别

文章大纲SQL 中 count(1)、count(*)、count(某列) 的区别一、核心定义与行为差异二、示例说明差异三、性能差异与优化四、适用场景建议五、面试应答要点六、索引扫描与全表扫描1. 索引扫描的触发条件2. 全表扫描的适用场景3. 常见面试问题点Q1&#xff1a;索引扫描一定比全表扫…

Linux面试问题-软件测试

1、你在上一家公司常用的Linux命令有哪些&#xff1f;答&#xff1a;使用vim/vi编辑文件&#xff0c;使用cat&#xff0c;more,less&#xff0c;head查看文件&#xff0c;使用grep过滤日志中的error,使用ps查看进程&#xff0c;使用top查看实时进程&#xff0c;netstat查看端口…

时序数据库的存储之道:从数据特性看技术要点

时序数据的独特挑战时序数据(Time-Series Data)是指按时间顺序记录的一系列数据点&#xff0c;在物联网、金融、工业监控等领域无处不在。与传统数据相比&#xff0c;时序数据具有几个鲜明特点&#xff1a;时间导向性&#xff1a;每个数据点都带有精确的时间戳高写入量&#xf…

【vim中替换】

vim中替换1 : s/在Vim中经常高频使用到的命令&#xff1a;1 : s/ &#xff1a;s 命令的基本语法是 :[range]s/{pattern}/{string}/[flags]&#xff0c;其中&#xff1a; • [range] 是可选的范围&#xff0c;用于指定替换的行范围。例如&#xff0c;% 表示全文&#xff0c;10,…

Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查

文章目录一、创建数据表二、连接MySQL数据库三、封装成一个完整的轻量级 ORM 风格类四、实现派生具体模型类五、支持多线程连接池 ORM 事务封装一、创建数据表 数据库名&#xff1a; 我们先创建一个数据库&#xff0c;名字叫 game_db&#xff1a; CREATE DATABASE IF NOT E…

Python脚本保护工具库之pyarmor使用详解

概要 PyArmor是一个专门为Python代码提供加密保护的第三方库,旨在解决Python源代码易被反编译和泄露的安全问题。作为一种动态代码保护工具,PyArmor能够对Python脚本进行混淆和加密处理,有效防止源代码被恶意获取、分析或篡改。该库特别适用于商业软件开发、知识产权保护和…

仓颉编程语言:从入门到精通

为啥要瞅瞅仓颉这玩意儿&#xff1f; 有一说一&#xff0c;现在的编程语言多得跟米一样&#xff0c;对吧&#xff1f;那一门新语言想火&#xff0c;没点绝活儿肯定不行。仓颉&#xff08;Cangjie&#xff09;这哥们儿&#xff0c;是华为搞出来的新玩意儿&#xff0c;静态编译的…

线性探针是什么:是一种用于探测神经网络中特定特征的工具

线性探针是什么 线性探针是一种在机器学习和相关领域广泛应用的技术,用于评估预训练模型特征、检测数据中的特定序列等。在不同的应用场景下,线性探针有着不同的实现方式和作用: 评估预训练模型特征:在机器学习中,线性探针是一种评估预训练模型“特征迁移能力”的标准化方…

【论文阅读】Few-Shot PPG Signal Generation via Guided Diffusion Models

从少量样本数据选择到后处理的整体框架。首先,扩散模型在N样本数据集和指导下的训练。接着,模型生成一个增强的数据集,并进一步优化以提高保真度。最后,这些合成数据与少量样本训练数据集结合,用于基准模型的训练和评估。数据分布从最初的红色变为保真度增强的蓝色,这表明…

CentOS-7的“ifupdown“与Debian的“ifupdown“对比 笔记250706

CentOS-7的"ifupdown"与Debian的"ifupdown"对比 笔记250706 CentOS 7 和 Debian 的 ifupdown 工具名称相同&#xff0c;但在实现机制、配置文件语法和系统集成上存在显著差异。以下是核心对比分析&#xff1a; ⚙️ 一、核心差异概览 对比维度CentOS 7De…

架构如传承:技术长河中的可持续乐章

代码结构&#xff1a;协作基石 在软件开发的世界里&#xff0c;代码结构就如同建筑的框架&#xff0c;支撑着整个项目的运行。想象一下&#xff0c;你加入了一个新的开发团队&#xff0c;接手一个已经有一定规模的项目。当你打开代码库&#xff0c;看到的是一团乱麻般的代码&a…

Ubuntu22.04更新Openssh至9.9p2无法正常连接,报错解决

Ubuntu22.04更新Openssh至9.9p2无法正常连接&#xff0c;报错解决 1.报错信息如下所示ExecStart/usr/sbin/sshd -D $SSHD_OPTS (codeexited, status255/EXCEPTION)2.这通常说明 SSH 配置文件存在语法错误、缺失关键文件&#xff0c;或者端口被占用等问题。 3.检查配置文件是否有…