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

【C语言】内存函数介绍(上)

C语言学习

内存函数
友情链接:C语言专栏


文章目录

  • C语言学习
  • 一、memcpy 使用和模拟实现
  • 二、memmove 使用
  • 附录
    • 上文链接
    • 专栏


一、memcpy 使用和模拟实现

memcpy是C语言标准库中的一个函数,用于将一段内存中的内容复制到另一段内存中。头文件是<string.h>
函数原型:

void * memcpy ( void * dest, const void * src, size_t num );

解释:

  • 函数memcpy从src的位置开始向后复制num个字节的数据到dest指向的内存位置。
  • 这个函数在遇到 ‘\0’ 的时候并不会停下来。
  • 如果src和dest有任何的重叠,复制的结果都是未定义的。
  • 返回目标内存的指针,也就是dest的值;

使用示例:

#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };memcpy(arr2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

输出想必都想到了:
在这里插入图片描述
那万一存在重叠的内存,怎么办?
不用着急,对于重叠的内存,交给memmove来处理。
memcpy的模拟实现:

#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{assert(dest && src);char* s1 = (char*)dest;const char* s2 = (const char*)src;while (num--){*s1++ = *s2++;}return dest;
}

实现很简单,就逐字节的复制。

二、memmove 使用

memmove是 语言标准库中的一个函数,用于将指定数量的字节从源内存块复制到目标内存块。与memcpy不同,memmove可以安全地处理内存重叠的情况,避免数据损坏。头文件是<string.h>
函数原型:

void * memmove ( void * dest, const void * src, size_t num );

说明:

  • 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

使用示例:

#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 + 2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}

输出:
在这里插入图片描述


附录

上文链接

《字符串与字符函数详解(下)》

专栏

C语言专栏

http://www.lryc.cn/news/594133.html

相关文章:

  • 【单片机外部中断实验修改动态数码管0-99】2022-5-22
  • 从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控
  • 多源异构数据融合的理论与方法
  • Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发
  • JavaScript 语言基础详解
  • 论文笔记:Seed: Bridging Sequence and Diffusion Models for RoadTrajectory Generation
  • TD3与SAC强化学习算法深度对比
  • [Python] -项目实战4- 利用Python进行Excel批量处理
  • Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
  • 无线通信相关概念
  • LeetCode 1712.将数组分成三个子数组的方案数
  • 基于卷积傅里叶分析网络 (CFAN)的心电图分类的统一时频方法
  • 复杂度+包装类型+泛型
  • @import导入css样式、scss变量用法、static目录
  • CSS中Padding与Margin的区别
  • `TransportService` 是 **Elasticsearch 传输层的“中枢路由器”**
  • Dify 1.6 安装与踩坑记录(Docker 方式)
  • python网络爬虫小项目(爬取评论)超级简单
  • EXPLAIN:你的SQL性能优化透视镜
  • ESXi6.7硬件传感器红色警示信息
  • 小程序和H5数据mock配置过程
  • Redis 概率型数据结构实战指南
  • 借助AI学习开源代码git0.7之四update-cache
  • 响应式编程入门教程第九节:UniRx 高级特性与自定义
  • 分治算法---归并
  • 7. 命令模式
  • 一维数组练题习~
  • 算法题(176):three states
  • windows11环境配置torch-points-kernels库编译安装详细教程
  • 如何优雅解决缓存与数据库的数据一致性问题?