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

C语言——字符串函数(2)和内存函数

(一)strtok函数

dilimiters参数是个字符串,定义了用作分隔符的字符集合

第一个参数指定一个字符串,它包含了0个或者多个由dilimiters字符串中一个或者多个分隔符分割的标记。

strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)

strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。如果字符串中不存在更多的标记,则返回 NULL 指针。

strtok函数的应用

如果分隔符太多,难道我们要一直写下去吗?不防我们换一种写法,特别巧妙!

常巧妙!

(二)strerror函数

返回错误码,所对应的错误信息。

错误码翻译成错误信息。

但在我们路径底下没有相应文件,自然是打开失败,所以会报错误信息。

当我在对应路径底下创建了对应文件

当我打开还是错误的,为什么呢?

因为我们还没有把文件名扩展开,一般电脑文件后缀名都是隐藏着的,那怎么打开呢?

当我们打开文件扩展名才会显示文件名所有后缀。

这次就不会报什么错误信息了,说明对应路径底下存在文件,我们打开了文件并关闭了。

还有个与它类型类似的函数perror

它会自动在后面打出错误信息。

perror==printf strerror

(三)memcpy函数

https://legacy.cplusplus.com/reference/cstring/memcpy/?kw=memcpy

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。

这个函数在遇到 '\0' 的时候并不会停下来。

如果source和destination有任何的重叠,复制的结果都是未定义的。

memcpy函数的返回类型是void*指针,因为memcpy设计者,不知道程序员使用memcpy拷贝什么类型的的数据,void*指针——通用类型指针,可以接受任意类型数据的地址。但是:这种类型指针不能直接解引用加减运算!

memcpy模拟实现函数

dest=(char*)dest+1 可以写出((char*)dest)++吗? src=(char*)src+1 可能可以但会出错。

但结果怎么跟我们的预想不一样呢?

(四)memmove函数

https://legacy.cplusplus.com/reference/cstring/memmove/?kw=memmove

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

如果源空间和目标空间出现重叠,就得使用memmove函数处理。

memmove模拟实现函数

换种测试方法

因为数组的地址是从低地址到高地址存放的,所以我们将目的地指针与源头指针比较,就能实现从前->后 或者从后->前的交换方式,分成区间来解决,完美模拟了memmove函数的实现。

(五)memcmp函数

跟strcmp的返回值相似。

那如果我们比较17个字节谁大呢?

明显arr2大,为什么呢?

因为VS是小端存储模式

arr1内存存储是 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00

arr2内存存储是 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 06 00 00 00

第17个字节是05与06的比较,自然arr2大,所以返回-1。

(六)memset函数

memset函数在修改的时候是以字节单位修改的。

所以给数组初始化是一个一个字节初始化,40字节就是10个010101。不能用来初始化数组。

相关文章:

C语言——字符串函数(2)和内存函数

(一)strtok函数dilimiters参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0个或者多个由dilimiters字符串中一个或者多个分隔符分割的标记。strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回…...

第1节 线性回归模型

1. 模型概述 对于收集到的数据(xi,yi)(x_i,y_i)(xi​,yi​),建立线性回归模型yiθTxiεi(1)y_i\theta^{^T} x_i \varepsilon_i (1)yi​θTxi​εi​(1) 需要估计的参数为θT\theta^{^T}θT,我们的目的是让估计的参数θT\theta^{^T}θT和xix_ixi​…...

CodeGeeX 130亿参数大模型的调优笔记:比FasterTransformer更快的解决方案

0x0 背景 相信大家都使用或者听说过github copilot这个高效的代码生成工具。CodeGeeX类似于github copilot,是由清华大学,北京智源研究院,智谱AI等机构共同开发的一个拥有130亿参数的多编程语言代码生成预训练模型。它在vscode上也提供了插件…...

Linux驱动之并发与竞争

文章目录并发与竞争的概念原子操作原子整形操作 API 函数原子位操作 API 函数自旋锁自旋锁简介自旋锁结构体自旋锁 API 函数自旋锁的注意事项读写自旋锁读写自旋锁的API顺序锁顺序锁的APIRCU(Read-Copy-Update)RCU的API信号量信号量API互斥体互斥体的API完成量(Completion)完成…...

【密码学复习】第四讲分组密码(三)

AES算法的整体结构 AES算法的轮函数 1)字节代换(SubByte) 2)行移位(ShiftRow) 3)列混合(MixColumn) 4)密钥加(AddRoundKey)1-字节代换…...

JVM(内存划分,类加载,垃圾回收)

JVMJava程序,是一个名字为Java 的进程,这个进程就是所说的“JVM”1.内存区域划分JVM会先从操作系统这里申请一块内存空间,在这个基础上再把这个内存空间划分为几个小的区域在一个JVM进程中,堆和方法区只有一份;栈和程序…...

工作中遇到的问题 -- 你见过哪些写的特别好的代码

strPtr : uintptr((*(*stringStruct)(unsafe.Pointer(&str))).str)代码解析: 这是一段 Go 代码,它的作用是获取一个字符串变量 str 的底层指针,即字符串数据的起始地址。 这段代码涉及到了 Go 语言中的指针、类型转换和内存布局等概念&…...

基于chatGPT设计卷积神经网络

1. 简介 本文主要介绍基于chatGPT,设计一个针对骁龙855芯片设计的友好型神经网络。 提问->跑通总共花了5min左右,最终得到的网络在Cifar100数据集上与ResNet18的精度对比如下。 模型flopsparamstrain acc1/5test acc1/5ResNet18(timm)1.8211.18~98…...

java.sql.Date和java.util.Date的区别

参考答案 java.sql.Date 是 java.util.Date 的子类java.util.Date 是 JDK 中的日期类,精确到时、分、秒、毫秒java.sql.Date 与数据库 Date 相对应的一个类型,只有日期部分,时分秒都会设置为 0,如:2019-10-23 00:00:0…...

动态规划---线性dp和区间dp

动态规划(三) 目录动态规划(三)一:线性DP1.数字三角形1.1数字三角形题目1.2代码思路1.3代码实现(正序and倒序)2.最长上升子序列2.1最长上升子序列题目2.2代码思路2.3代码实现3.最长公共子序列3.1最长公共子序列题目3.2代码思路3.3代码实现4.石子合并4.1题目如下4.2代…...

常见的2D与3D碰撞检测算法

分离轴分离轴定理(Separating Axis Theorem)是用于解决2D或3D物体碰撞检测问题的一种方法。其基本思想是,如果两个物体未发生碰撞,那么可以找到一条分离轴(即一条直线或平面),两个物体在该轴上的…...

STM32 10个工程篇:1.IAP远程升级(二)

一直提醒自己要更新CSDN博客,但是确实这段时间到了一个项目的关键节点,杂七杂八的事情突然就一涌而至。STM32、FPGA下位机代码和对应Labview的IAP升级助手、波形设置助手上位机代码笔者已经调试通过,因为不想去水博客、凑数量,复制…...

Unity+ChatGpt的联动 AICommand

果然爱是会消失的,对吗 chatGpt没出现之前起码还看人家的文章,现在都是随便你。 本着师夷长技以制夷的思路,既然打不过,那么我就加入 github地址:https://github.com/keijiro/AICommand 文档用chatGpt翻译如下&#…...

STM-32:按键控制LED灯 程序详解

目录一、基本原理二、接线图三、程序思路3.1库函数3.2程序代码注:一、基本原理 左边是STM322里电路每一个端口均可以配置的电路部分,右边部分是外接设备 电路图。 配置为 上拉输入模式的意思就是,VDD开关闭合,VSS开关断开。 浮空…...

北邮22信通:(8)实验1 题目五:大整数加减法(搬运官方代码)

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章: 北邮22信通:(7)实验1 题目四:一元多项式(节省内存版)_青山如…...

Fiddler抓取https史上最强教程

有任何疑问建议观看下面视频 2023最新Fiddler抓包工具实战,2小时精通十年技术!!!对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。 但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路&#xff…...

STM32开发基础知识入门

C语言基础 位操作 对基本类型变量可以在位级别进行操作。 1) 不改变其他位的值的状况下,对某几个位进行设值。 先对需要设置的位用&操作符进行清零操作,然后用|操作符设值。 2) 移位操作提高代码的可读性。 3) ~取反操作使用技巧 可用于对某…...

学习操作系统的必备教科书《操作系统:原理与实现》| 文末赠书4本

使用了6年的实时操作系统,是时候梳理一下它的知识点了 摘要: 本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 文章目录…...

大数据的常用算法(分类、回归分析、聚类、关联规则、神经网络方法、web数据挖掘)

在大数据时代,数据挖掘是最关键的工作。大数据的挖掘是从海量、不完全的、有噪声的、模糊的、随机的大型数据库中发现隐含在其中有价值的、潜在有用的信息和知识的过程,也是一种决策支持过程。其主要基于人工智能,机器学习,模式学…...

【数据结构】详解二叉树与堆与堆排序的关系

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏&#xff…...

【Pandas】数据分析入门

文章目录前言一、Pandas简介1.1 什么是Pandas1.2 Pandas应用二、Series结构2.1 Series简介2.2 基本使用三、DataFrame结构3.1 DataFrame简介3.2 基本使用四、Pandas-CSV4.1 CSV简介4.2 读取CSV文件4.3 数据处理五、数据清洗5.1 数据清洗的方法5.2 清洗案例总结前言 大家好&…...

【c++】:list模拟实现“任意位置插入删除我最强ƪ(˘⌣˘)ʃ“

文章目录 前言一.list的基本功能的使用二.list的模拟实现总结前言 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中&#xff0…...

QT表格控件实例(Table Widget 、Table View)

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀 文章目录前言一、图示实例二、列…...

第二章Vue组件化编程

文章目录模块与组件、模块化与组件化模块组件模块化组件化Vue中的组件含义非单文件组件基本使用组件注意事项使用 kebab-case使用 PascalCase组件的嵌套模板templateVueComponent一个重要的内置功能单文件组件Vue脚手架使用Vue CLI脚手架先配置环境初始化脚手架分析脚手架结构实…...

面试官:vue2和vue3的区别有哪些

目录 多根节点,fragment(碎片) Composition API reactive 函数是用来创建响应式对象 Ref toRef toRefs 去除了管道 v-model的prop 和 event 默认名称会更改 vue2写法 Vue 3写法 vue3组件需要使用v-model时的写法 其他语法 1. 创…...

【TopK问题】——用堆实现

文章目录一、TopK问题是什么二、解决方法三、时间复杂度一、TopK问题是什么 TopK问题就是从1000个数中找出前K个最大的数或者最小的数这样的类似问题。 不过并不要求这k个数字必须是有序的,如果题目有要求,则进行堆排序即可。 还有比如求出全国玩韩信…...

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…...

使用Nginx反向代理OpenAI API

由于OpenAI的API在国内无法访问,所以可以通过海外服务器利用Nginx实现反向代理。 安装Nginx 这一步就不赘述了,不同的Linux系统安装方式略有不同,根据自己的服务器的系统自行百度即可。 OpenSSL创建证书 因为OpenAI的接口是https协议的&a…...

USB键盘实现——字符串描述符(四)

字符串描述符 字符串描述符内容解析和 HID鼠标 一致。 获取字符串描述符请求 标准设备请求 typedef struct __attribute__ ((packed)){union {struct __attribute__ ((packed)) {uint8_t recipient : 5; ///< Recipient type usb_request_recipient_t.uint8_t type …...

STM32的中断

目录 一、STM32中断概述 二、外部中断控制器EXTI 三、按键中断 四、串口中断 一、STM32中断概述 处理器中的中断在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的…...

域名空间商界面/做网络优化的公司排名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电工&#xff08;高级&#xff09;考试技巧参考答案及电工&#xff08;高级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及电工&#xff08;高级&#xff09;操作证已考过的学员汇总&#xff0c;相对有…...

钦州公司做网站/游戏推广公司靠谱吗

Edge浏览器主页被360劫持怎么办 &#xff1f; 我出现的问题是在安装了360安全卫士之后&#xff0c;每次打开Edge浏览器&#xff0c;出现的都是360浏览器界面&#xff0c;全是一堆的垃圾广告和信息&#xff0c;太影响效率了。经查证&#xff0c;是Edge浏览器被360劫持了&#xf…...

西安高端网站设计公司/青岛关键词排名哪家好

1. DataTable.Select()&#xff0c;数据筛选&#xff0c;有四个重载,不带参数的重载Select()的意思是获取所有的行数组&#xff0c;并按主键进行排序。 2. DataTable.Clone()&#xff0c;复制表结构&#xff0c;也就是对象的深拷贝&#xff0c;在c#里面&#xff0c;有浅拷贝和…...

织梦云建站系统/宁波品牌网站推广优化公司

[20160831]关于数据块Checksum.txt --以前我学习bbed时做过一些测试,将AAAA替换成BBBB,你可以发现数据块的Checksum并没有发生变化,当时并没有仔细探究, --现在想起来计算Checksum算法应该相对简单,就是做异或操作. --比如上面的字符AAAA如果2个字符按位做异或操作,变成0000000…...

广西南宁网站建设/指数工具

首先是用java来实现简单的Server端(http的请求内容格式可以参考msdn:http://msdn.microsoft.com/zh-cn/library/hh202945(vvs.92)): /*** 推送toast通知* param uriString 推送服务通知uri* param title toast标题* param content toast内容* param param 页面跳转参…...

内容展示类网站/百度经验悬赏任务平台

Galaxy 在一维坐标轴上给出n个点&#xff0c;第i个点坐标为\(x_i\),现在你可以任意移动k个点的&#xff0c;最小化它们的方差&#xff0c;\(n\leq 50000\)。 解 设\(\bar{x}\frac{\sum_{i1}^nx_i}{n}\),容易知道方差为 \[\sum_{i1}^n(x_i-\bar{x})^2\sum_{i1}^nx_i^2-n\bar{x}^…...