【C语言】(18)内存操作函数

内存操作函数在C语言中是用来进行内存操作的一系列标准库函数,这些函数包含在<string.h>头文件中。

1.复制内存区域

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

  • 功能:从源src的位置开始复制n个字节到目标dest的位置。
  • 参数
    • dest:指向用于存储复制内容的目标数组的指针。
    • src:指向要复制的数据的源数组的指针。
    • n:要复制的字节数。
  • 返回值:返回指向dest的指针。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // 用于 malloc 和 free
#include <string.h> // 用于 memcpyint main() {int src[] = { 0, 4, 5, 6, 8, 9, 0 };int numberOfElements = sizeof(src) / sizeof(src[0]); // 计算 src 中的元素数量// 为 dest 分配内存。确保为所有元素分配足够空间。int* dest = (int*)malloc(sizeof(src));if (dest == NULL) {printf("内存分配失败\n");return 1; // 如果内存分配失败则退出}// 将整个 src 数组复制到 destmemcpy(dest, src, sizeof(src));// 使用 numberOfElements 控制循环for (int i = 0; i < numberOfElements; i++) {printf("%d ", dest[i]);}// 释放分配的内存以避免内存泄漏free(dest);return 0;
}
2.移动内存区域

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

  • 功能:与memcpy相似,但是更安全,因为它在复制时考虑到了源和目标内存区域重叠的情况。
  • 参数
    • dest:指向用于存储复制内容的目标数组的指针。
    • src:指向要复制的数据的源数组的指针。
    • n:要复制的字节数。
  • 返回值:返回指向dest的指针。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main() {char str[] = "hello world";// 演示不重叠情况下的复制printf("原始字符串: %s\n", str);memmove(str + 6, str + 0, 5); // 将 "hello" 复制到 "world" 前面printf("复制后字符串: %s\n", str);// 重置字符串strcpy(str, "hello world");// 演示重叠情况下的复制printf("原始字符串: %s\n", str);memmove(str + 4, str + 3, 8); // 将 "lo world" 复制到 "o world" 位置printf("复制后字符串: %s\n", str);return 0;
}
3.设置内存区域

void *memset(void *s, int c, size_t n);

  • 功能:将s指向的内存区域的前n个字节设置为字节c的值。
  • 参数
    • s:指向要填充的内存块的指针。
    • c:要设置的值,传递的值是int,但是函数内部会将其转换为unsigned char
    • n:要设置的字节数。
  • 返回值:返回指向s的指针。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main() {char str[50];memset(str, 'a', 10);str[10] = '\0'; // 添加字符串结束符printf("%s\n", str);return 0;
}
4.比较内存区域

int memcmp(const void *s1, const void *s2, size_t n);

  • 功能:比较s1s2指向的内存区域的前n个字节。
  • 参数
    • s1:指向要比较的第一个内存块的指针。
    • s2:指向要比较的第二个内存块的指针。
    • n:要比较的字节数。
  • 返回值:如果第一个不匹配的字节在s1小于s2时返回负数,如果s1大于s2时返回正数,如果两个内存块相等则返回0。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main() {char buffer1[] = "DWgaOtP12df0";char buffer2[] = "DWGAOTP12DF0";int n = memcmp(buffer1, buffer2, sizeof(buffer1));if (n > 0) printf("buffer1 大于 buffer2\n");else if (n < 0) printf("buffer2 大于 buffer1\n");else printf("buffer1 等于 buffer2\n");return 0;
}
5.搜索内存区域

void *memchr(const void *s, int c, size_t n);

  • 功能:在s指向的内存区域的前n个字节中搜索第一次出现的字节c的值。
  • 参数
    • s:指向要被搜索的内存块的指针。
    • c:要搜索的值。
    • n:要搜索的字节数。
  • 返回值:如果找到指定的字节,则返回指向该字节的指针;如果在给定的字节数内没有找到指定的字节,则返回NULL
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main() {const char* str = "Hello, World!";const char ch = ',';char* ret;ret = memchr(str, ch, strlen(str));printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);return 0;
}

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

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

相关文章

【C语言】GtkStack及标签页的关闭

一、GtkStack GtkStack 是 GTK&#xff08;GIMP Toolkit&#xff09;库中的一个容器类&#xff0c;用于管理多个子窗口部件&#xff08;widgets&#xff09;&#xff0c;但在任何给定时间内只显示其中一个。GtkStack 提供了一种在同一个空间位置显示不同内容的方式&#xff0c…

「优选算法刷题」:只出现一次的数字

一、题目 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入…

npm修改镜像源

背景&#xff1a;切换npm镜像源是经常遇到的事&#xff0c;下面记录下具体操作命令 1. 打开终端运行"npm config get registry"命令来查看当前配置的镜像源 npm config get registry2. 修改成淘宝镜像源"https://registry.npmjs.org/" npm config set re…

嵌入式硬件工程师与嵌入式软件工程师

嵌入式硬件工程师与嵌入式软件工程师 纯硬件设备与嵌入式设备 纯硬件设备是指内部不包含微处理器&#xff0c;无需烧写软件就能够运行的电子设备。如天线、老式收音机、老式电视机、老式洗衣机等。这类设备通常功能简单&#xff0c;易于操作&#xff0c;用户通常只需要打开电…

已解决org.springframework.web.HttpMediaTypeNotSupportedException异常的正确解决方法,亲测有效!!!

已解决org.springframework.web.HttpMediaTypeNotSupportedException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 总结 问题分析 在开发基于Spring框架的Web应用时&#xff0c;我们可能…

前端工程化之:webpack2-2(内置插件)

目录 一、内置插件 1.DefinePlugin 2.BannerPlugin 3.ProvidePlugin 一、内置插件 所有的 webpack 内置插件都作为 webpack 的静态属性存在的&#xff0c;使用下面的方式即可创建一个插件对象&#xff1a; const webpack require("webpack")new webpack.插件…

浅谈bypass Etw

文章目录 c#ExecuteAssemblybypass etw c# loader 一种是通过反射找到指定空间的类中method进行Invoke 另一种是通过EntryPoint.Invoke加载 反射加载 Assembly.Load()是从String或AssemblyName类型加载程序集&#xff0c;可以读取字符串形式的程序集 Assembly.LoadFrom()从指定…

JVM内存分析与优化

JVM内存模型分析 在minor gc过程中对象挪动后&#xff0c;引用如何修改&#xff1f; 对象在堆内部挪动的过程其实是复制&#xff0c;原有区域对象还在&#xff0c;一般不直接清理&#xff0c;JVM内部清理过程只是将对象分配指针移动到区域的头位置即可&#xff0c;比如扫描s0区…

力扣刷题-135.分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c;计算并返回需要准备的…

零基础学编程从哪里入手,在学习中可以线上会议答疑解惑

一、前言 零基础学编程可以先从容易学的语言入手&#xff0c;比如中文编程&#xff0c;然后再学其他编程语言则会比较轻松&#xff0c;初步掌握编程思路。很多IT人士一般学2到3种编程语言。 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接…

速度规划:s形曲线应用(变速 停车)opencv c++显示(3)

理论篇 先看该篇&#xff0c;这里沿用了里面的变量。 应用推导篇 分为变速和停车两部分&#xff08;字迹潦草&#xff0c;可结合代码看&#xff09; 代码篇 变速函数入口&#xff1a; velocityPlanner vp; vp.SetParameters(0, 1);停车函数入口&#xff1a; ParkingVelo…

uniCloud ---- schema2code

目录 schema2code有两种方式 label属性 component属性 group属性 应用 DB Schema里有大量的信息&#xff0c;其实有了这些信息&#xff0c;前端将无需自己开发表单维护界面&#xff0c;uniCloud可以自动生成新增、修改、列表、详情的前端页面&#xff0c;以及admin端的列…

电脑小白必看:如何备份电脑系统?

电脑系统坏了怎么办&#xff1f;扛着自己的笔记本或是台式机的主机去电脑修理店花几十上百重装系统&#xff1f;或是自己用光盘或是U盘启动盘花费数小时重新安装系统&#xff1f;还在为系统问题发愁吗&#xff1f;今天&#xff0c;小编给大家一个简单的方法&#xff0c;让你免去…

ERP 系统架构的设计与实践总结

企业资源计划&#xff08;ERP&#xff09;系统是一种集成多个业务功能的综合性软件解决方案。在设计和实践 ERP 系统架构时&#xff0c;需要考虑诸多因素&#xff0c;以确保系统能够满足企业的需求&#xff0c;并提供高效、可靠、安全的服务。本文将介绍一些关键的设计原则和实…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(六)NodeJS入门——http模块

047_http模块_获取请求行和请求头 hello&#xff0c;大家好&#xff0c;那第二节我们来介绍一下如何在这个服务当中来提取 HTT 请求报文的相关内容。首先先说一下关于报文的提取的方法&#xff0c;我在这个文档当中都已经记录好了&#xff0c;方便大家后续做一个快速的查阅。 …

情绪影响下的交谈与决策偏差

人是情感丰富的生物&#xff0c;我们的情绪状态不仅塑造着我们的感知和行为&#xff0c;更深深地影响着我们的判断与决策。尤其是在人际交流中&#xff0c;带着强烈情绪进行交谈往往容易导致误解、冲突甚至做出错误的判断。本文将围绕这一现象展开讨论&#xff0c;揭示情绪对交…

图像处理之《生成隐写流》论文阅读

一、文章摘要 生成隐写术(GS)是一种新的数据隐藏方式&#xff0c;其特点是直接从秘密数据生成隐写介质。现有的GS方法通常因性能差而受到批评。本文提出了一种新的基于流的GS方法——生成隐写流(GSF)&#xff0c;该方法可以直接生成隐写图像而不需要封面图像。我们将隐写图像生…

简单实验 spring cloud gateWay 路由实验 实验

1.概要 1.1 说明 微服务统一网关实验&#xff0c;这里简单实验一下路由的功能 1.2 实验步骤&#xff0c;使用下面这个工程作为基础工程添加了一个gateWay做如下使用 简单实践 spring cloud nacos nacos-server-2.3.0-CSDN博客 2 代码 2.1 工程文件 <?xml version&quo…

Qt程序设计-导出PDF

本文讲解如何实现导出PDF,包含如何使用HTML格式和添加图片。 实例如下: 创建项目,添加两个按钮,并在D盘提前准备好图片。 窗体的头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <QPrinter> #include <QPainter> #i…

泰雷兹和Quantinuum推出入门套件,帮助企业为未来的后量子加密变革做好准备

•新的解决方案——PQC入门套件(PQC Starter Kit)为用户提供了一种快速、简便的方法&#xff0c;用于测试和衡量其在后量子时代防范量子计算攻击的准备情况 •随着量子计算逐渐成熟&#xff0c;企业为后量子时代做好准备并培养加密灵活性&#xff0c;对于降低数据泄露风险至关重…