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

C语言中memmove和memcpy

1、memmove()函数

void *memmove(void *str1, const void *str2, size_t n);

str2所指向的存储区的前n个字节复制到str1所指向的存储区

memmove()允许str1str2所指向的存储区重叠”。通过检查地址关系,自动选择复制方向(从前往后或从后往前),确保数据复制的正确性。

注意:

1)、str1所指向的存储区必须至少有n个字节,否则,会引起内存溢出。

2)、当“str1str2所指向的存储区重叠”时,memmove()要比memcpy()能执行正确的拷贝。如果“str1str2所指向的存储区不重叠”,则memmove()和memcpy()拷贝的效果是一样的。

2、memmove复制浮点数

#include "string.h" //memmove()需要包含string.h头文件

void Test_memmove(void)

{

float buf1[10]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.5};

//声明浮点数数组buf1[],并初始化

float buf2[10]={1.5,2.5,3.5,4.5,5.5};//声明浮点数数组buf2[],并初始化

memset(buf1,'\0',sizeof(buf1));//将buf1[]设置为0

memmove(buf1,buf2,5*sizeof(float));

//将buf2[]中的前5个浮点数拷贝到buf1[]中

}

3、C语言中memmove和memcpy的区别

#include "string.h" //strcpy(),memcpy()和memmove()需要包含string.h头文件

void Test_memmove(void)

{

char buf[11];

//声明char型数组buf[]

strcpy(buf,"abcdefg");

memcpy(&buf[1], &buf[0], 9);

//将"abcdefg\0\0"拷贝到起始的地址为&buf[1]中的存储单元中

printf("%s\r\n",&buf[1]);//串口输出"abcddfg",出现拷贝错误

strcpy(buf,"abcdefg");

memmove(&buf[1], &buf[0],9);

//将"abcdefg\0\0"拷贝到起始的地址为&buf[1]中的存储单元中

printf("%s\r\n",&buf[1]);//串口输出"abcdefg",拷贝正确

//通过比较,我们发现dest>src,发现memcpy()有问题,而memmove()执行了正确的拷贝

strcpy(buf,"abcdefg");

memcpy(&buf[0], &buf[1], 9);

//将"bcdefg\0\0\0"拷贝到起始的地址为&buf[1]中的存储单元中

printf("%s\r\n",&buf[0]);//串口输出"bcdefg",拷贝正确

strcpy(buf,"abcdefg");

memmove(&buf[0], &buf[1],9);

    //将"bcdefg\0\0\0"拷贝到起始的地址为&buf[1]中的存储单元中

printf("%s\r\n",&buf[0]);//串口输出"bcdefg"

//通过比较,我们发现dest<=src,发现memcpy()和memmove()均能执行正确的拷贝

}

http://www.xdnf.cn/news/3835.html

相关文章:

  • 智慧校园整体解决方案-5PPT(65页)
  • python中的异常处理
  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • 数学实验Matlab
  • 多把锁以及线程死锁问题
  • Linux-GRUB全面指南
  • CUDA输出“hello world”
  • 多数据源动态切换
  • 算法每日一题 | 入门-顺序结构-数字反转
  • (38)VTK C++开发示例 ---纹理裁剪
  • C++负载均衡远程调用学习之异步消息任务功能与连接属性
  • CVPR2021 | 重新思考视觉Transformer中的自注意力机制
  • Java学习手册:Spring 生态其他组件介绍
  • 单细胞测序试验设计赏析(一)
  • AWS在跨境电商中的全场景实践与未来生态构建
  • D. 例题3.2.2 整数划分问题
  • 二种MVCC对比分析
  • 学习黑客风险Risk
  • iOS启动优化:从原理到实践
  • 2025年渗透测试面试题总结-拷打题库35(题目+回答)
  • 【C++】:C++17新特性
  • Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录
  • 2845. 统计趣味子数组的数目
  • 【LLaMA-Factory实战】Web UI快速上手:可视化大模型微调全流程
  • The Sims 4 模拟人生 4 [DLC 解锁] [Steam Epic EA] [Windows SteamOS]
  • 《操作系统真象还原》第十二章(2)——进一步完善内核
  • 影刀RPA中新增自己的自定义指令
  • UDP网络编程
  • Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析
  • 安卓基础(悬浮窗)