C语言内存函数

【C语言】内存操作函数 本文详细讲述了内存函数的用法及它的模拟实现,里面还有相对应的具体用法,能够快速的掌握。 阅读详情

目录

1. memcpy使⽤和模拟实现

1.1函数模型

1.2memcpy的使用

1.3memcpy函数的模拟实现

2. memmove使⽤和模拟实现

2.1函数模型

2.2memmove的使用

 2.3memmove函数的模拟实现

3. memset函数的使⽤

3.1 函数模型

3.2memset的使用 

4. memcmp函数的使⽤

4.1函数模型

 4.2memcmp的使用


1. memcpy使⽤和模拟实现

1.1函数模型

• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
• 这个函数在遇到 '\0' 的时候并不会停下来。
• 如果source和destination有任何的重叠,复制的结果都是未定义的。

1.2memcpy的使用

#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); //从arr1复制20个字节(不是20个元素)到arr2
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr2[i]);
    }
    return 0;
}

        对于重叠的内存,用memmove来处理。

1.3memcpy函数的模拟实现

#include <stdio.h>
#include <assert.h>

void* my_memcpy(void* dst, const void* src, size_t count)
{
    void* ret = dst;
    assert(dst);
    assert(src);

    while (count--)
    {
        *(char*)dst = *(char*)src;
        dst = (char*)dst + 1;
        src = (char*)src + 1;   
    }

    return ret; 
}

int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
    int arr2[10] = { 0 };
    my_memcpy(arr2, arr1, 20); //从arr1复制20个元素到arr2
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr2[i]);
    }
    return 0;
}

2. memmove使⽤和模拟实现

2.1函数模型

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

2.2memmove的使用

#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;
}

 2.3memmove函数的模拟实现

#include <stdio.h>
#include <assert.h>

void* my_memmove(void* dst, const void* src, size_t count)
{
    void* ret = dst;
    assert(dst);
    assert(src);

    if (dst > src)//如果dst在src的后面,//先到最后一个位置,从后往前复制
    {
        dst = (char*)dst + count - 1;
        src = (char*)src + count - 1;
        while (count--)
        {
            *(char*)dst = *(char*)src;
            dst = (char*)dst - 1;
            src = (char*)src - 1;
        }
    }
    if (dst < src)//如果dst在src前面,从前往后复制
    {

        while (count--)
        {
            *(char*)dst = *(char*)src;
            dst = (char*)dst + 1;
            src = (char*)src + 1;
        }
    }

    return ret;
}

int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
    my_memmove(arr1, arr1+ 2, 20);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr1[i]);
    }
    return 0;
}

3. memset函数的使⽤

3.1 函数模型

        memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。

3.2memset的使用 

#include <stdio.h>
#include <string.h>

int main ()
{
    char str[] = "hello world";
    memset (str,'x',6);
    printf(str);
    return 0;
}

4. memcmp函数的使⽤

4.1函数模型

        比较从prt1和prt2指针指向的位置开始,后面的num个字节。

返回值如下:

        memcmp的比较与strcmp类似,见C语言中的字符函数和字符串函数。

 4.2memcmp的使用

#include <stdio.h>
#include <string.h>
int main()
{
    char buffer1[] = "1234";
    char buffer2[] = "11234";
    int n;
    n = memcmp(buffer1, buffer2, sizeof(buffer1));
    if (n > 0) 
        printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
    else if (n < 0) 
        printf("'%s' is less than '%s'.\n", buffer1, buffer2);
    else
        printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
    return 0;
}

         注:小写字母的ASCLL码值要大于大写字母的ASCLL码值,所以当相同的字母比较时,小写字母大于大写字母。

【C语言进阶】字符串&内存函数 前言: 字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中。字符串常量适用于那些对它不做修改的字符串函数。同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 string.h 中。 目录 一、求字符串长度 strlen strlen函数的模拟实现 二、长度不受限制的字符串函数 strcpy strcpy函数的模拟实现 strcat strcat函数的模拟实现 str... 阅读详情

相关推荐

开源浏览器插件开发实战:从零搭建多平台内容分发工具

浏览器扩展(Browser Extension)是运行在浏览器上层、通过标准Web技术增强浏览器能力的轻量级程序,其核心价值在于对页面内容的读取、操作与跨应用信息流转。在内容创作与分发场景中,创作者频繁需要在公众号、知乎、优快云、头条等平台间搬运同一篇文章,而传统SaaS分发工具往往受限于免费额度、授权托管和平台适配滞后等问题。基于Manifest V3规范,开发者可以构建一款100%开源、永久免费的浏览器插件,利用content script完成从源文章页提取标题、正文与图片,通过消息通信机制将结构化数

weixin_29882269的博客 295

C语言的内存函数

C语言库函数中有可以直接对内存操作的函数,这类函数叫作内存函数。内存函数即针对内存块进行数据处理的函数,内存块的意思就是“一块内存,一块空间”。

2401_85409229的博客 1609

模型剪枝实战 | Torch-Pruning 库在YOLOv8上的应用指南

本文详细介绍了如何使用Torch-Pruning库对YOLOv8模型进行结构化剪枝,以实现模型“瘦身”。通过DepGraph(依赖图)技术自动处理层间依赖,确保剪枝安全。文章提供了从环境搭建、核心原理理解到完整剪枝流程的实战指南,并强调了剪枝后的微调与性能评估,帮助开发者在保持精度的同时显著提升模型推理速度。

weixin_29046035的博客 503

【C语言】内存函数

本章节讲解了memcpy和memmove函数,也实现了他们的模拟实现。内存复制函数——memcpy内存移动函数——memmove今天的内容到这里就全部结束啦,在下章为大家讲解剩下的三个函数。!!

2501_90303633的博客 1705

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3917

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1909

C语言 内存函数

memcpy 是C语言标准库函数,用于在内存中复制数据块,在 <string.h> 头文件中声明。以下是memmove 是C 语言标准库函数,用于安全复制内存块,声明于 <string.h> 头文件。以下是详细memset 是C 语言标准库函数,用于初始化内存块,声明于 <string.h> 头文件。以下是详细说memcmp 是 C语言标准库函数,用于比较两个内存块的二进制数据,声明于 <string.h> 头文件。

2401_88465894的博客 1572

企业信息化系统的组成模块-核心业务系统

通过标准化的数据流形成完整的业务闭环,CRM生成的销售订单驱动ERP的生产和采购,ERP将生产计划传递给MES执行,MES报工数据返回ERP进行成本核算,ERP再将交付信息同步给CRM供客户查询。生产管理确保高效交付,缩短订单周期。某贸易公司实施ERP供应链模块后,库存周转率从每年4次提升到8次,库存资金占用从2000万降到1200万,释放800万现金流,同时缺货率从15%降到5%。│ │库存 │ │ MRP │ │ ERP │ │ 云ERP/ │ │。

weiyvyy的博客 695

【C语言】内存函数详细讲解

前面我们学习了字符串函数,但字符串函数只能对字符串进行操作,但在C语言中有很多的数据类型,所以本章讲解一些内存函数,这些函数可以对任何数据类型进行拷贝、追加、比较。

mfy12138的博客 3361

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍_nbiot ntn

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!” />你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!!

2401_83703866的博客 3166

打通ZYNQ的任督二脉:AXI_FIFO数据交互全解析

FIFO(First In First Out,先进先出)是一种经典的数据缓冲结构,就像排队买票一样,先来的人先得到服务。时钟域交叉(CDC):连接不同时钟频率的模块数据缓冲:平衡生产者和消费者的速度差异流量控制:防止数据丢失或溢出input clk,// 输入AXI4-Stream接口(从PS到PL)// 输出AXI4-Stream接口(从PL到PS)// 状态指示信号// 定义状态机状态// 数据缓存// 8个深度的缓存// 流水线处理寄存器。

QQ_778132974的博客 306

【C语言系列】C语言内存函数

本文详细探讨了C语言中几个核心内存操作函数的使用方法和原理,包括memcpymemmovememset和memcmp。这些函数是处理内存数据的基本工具,广泛应用于高效的内存管理、数据复制、初始化和比较等场景。memcpymemcpymemmovememset和memcmp是C语言中处理内存数据的基础函数,掌握它们的使用方法对于进行高效的内存操作至关重要。memcpy和memmove都用于内存复制,但memmove能够安全地处理内存重叠情况。memset用于设置内存内容,而memcmp用于比较内存区域。

2301_80179750的博客 2046

通信算法之325:无人机云哨协议及发射机接收机仿真算法

【代码】通信算法之325:无人机云哨物理层协议及发射机接收机仿真代码。

leegang12的专栏 362

C语言之内存函数

内存函数:通常指的是在编程中用于处理内存操作的函数,这些函数可以用来分配、释放、复制、比较等内存相关的操作。在C语言中,这些内存函数 、、、 都需要引用头文件 。 函数的原型如下: :目标内存地址,即要将数据复制到的位置。 :源内存地址,即要复制数据的起始位置。 :要复制的字节数。 函数会从源内存地址 复制 个字节的数据到目标内存地址 ,并返回目标内存地址 。 假设存在两片这样的空间由两个指针“dest”和“src”维护,解引用赋值过去相当于copy过去一个字节然后“dest++”和“

weixin_61183404的博客 1871

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言:内存函数

C语言标准库中有这样一些内存函数,让我们一起学习吧!!

weixin_51142926的博客 6981

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C语言进阶-字符串函数与内存函数

前言 本章主要讲解: 字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp 字符串查找 strstr strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset memcmp 写在前面的话: C语言本身是没有字符串类型的 字符串通常放在常量字符串(不做修改)中或者字符数

~ 2410
上一篇: C语言中的字符函数和字符串函数
下一篇: C语言数据在内存中的存储
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值