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

教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数

 如何成为一个集雷切,写轮眼侦查和拷贝与一身的卡卡西,下面教你!

目录

 第一式——雷切! 

strtok

第二式——写轮眼侦查!

strerror函数

第三式——写轮眼拷贝!

memcpy

 模拟实现memcpy函数


 😎博客昵称:陈大大陈

😊座右铭:所谓觉悟,就是在漆黑的荒野上开辟出一条理当前进的光明大道。

😋博主简介:一名热爱C/C++和算法等技术,喜欢运动,爱胡思乱想却胸怀大志的小博主!

😚博主&唠嗑:早午晚哈喽Ciao!😄各位CSDN的朋友!😄我是博客新人陈大大陈,希望我的文章能为你带来帮助!欢迎大家在评论区畅所欲言!也希望大家多多为我提出您宝贵的建议!😘如果觉得我写的不错的话还请点个赞和关注哦~😘😘😘

 

 第一式——雷切! 

strtok

char * strtok ( char * str, const char * delimiters ) 

  • 这其中,delimiters参数是一个字符串,定义了用作分隔符的参数集合 。
  • 而str参数指定一个目标字符串,这个字符串中包含0个或者多个由delimiters中的分隔符分割的标记。
  • strtok函数的功能是找到下一个标记,并将其用\0结尾,返回一个指向该标记的指针。
  • 需要注意的是,strtok函数会改变被操作的目标字符串,所以我们再用该函数进行分割操作时,一般都是使用字符串的临时拷贝。
  • strtok函数的第一个参数不为NULL时,函数将找到str中的第一个标记,函数将它保存在字符串当中的位置。
  • strtok的第一个参数为NULL,函数将在同一个字符串被保存的位置开始,寻找下一个标记位置。
  • 如果字符串中没有标记位置,或者标记位置已经被查找完成,函数返回一个NULL指针。

代码示范:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{char str[] = "- This, a sample string.";char* pch;printf("Splitting string \"%s\" into tokens:\n", str);pch = strtok(str, " ,.-");while (pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " ,.-");}return 0;
}

如图所示,我们定义了空格,逗号,句号和减号四个分隔符来将字符串分割,当函数返回值不为空指针时,我们持续调用函数。

运行结果如下:

 除此之外,还有一个极为巧妙的的写法

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{char str[] = "- This, a sample string.";char* pch;printf("Splitting string \"%s\" into tokens:\n", str);for ( pch = strtok(str, " ,.-");pch != NULL; pch = strtok(NULL, " ,.-")){printf("%s\n", pch);}return 0;
}

没错!用for循环也是可以滴!就像是卡卡西的千鸟和雷切,不管用哪个都能把带土切开!

第二式——写轮眼侦查!

卡卡西具有出色的侦查能力,可以发现任何风吹草动,我们也有模拟实现这一功能的函数。

strerror函数

char * strerror ( int errnum );

函数会返回错误码所对应的错误信息,返回值是一个指向描述错误的字符串的指针。

要使用它的话,必须包含errno.h这个头文件。

#include <stdio.h>
#include <string.h>
int main()
{char* p = strerror(0);printf("%s\n", p);p=strerror(1);printf("%s\n", p);p = strerror(2);printf("%s\n", p);p = strerror(3);printf("%s\n", p);return 0;
}
  • 每一个这样的错误码都对应着一个错误信息,sterror函数能把错误码所对应错误信息的首字符的地址返回。
  • 当C语言的库函数调用失败的时候,会将一个错误码存放在一个叫errno的变量中
  • 当我们想知道调用库函数的时候发生了什么错误信息,就可以将errno中的错误码翻译成错误信息。

看下面的例子:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{FILE* pf = fopen("test.txt", "r");
//打开文件函数,r代表只读;
//如果该文件不存在话,就会打开失败,失败的话,pf里面存的就是NULL空指针,就会把错误码放在变量errno里面;if (pf == NULL){printf("打开文件失败,原因是:%s\n", strerror(errno));return 1;}fclose(pf);pf == NULL;return 0;
}

并没有这个文件,返回空指针,并且打印出对应的错误信息。

有了strerror函数,你就犹如开了写轮眼的卡卡西,精准洞察危险!

也可以这样:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("打开文件夹:");return 1;}fclose(pf);pf == NULL;return 0;
}

结果是一样的,因为 perror就等于printf+strerror。

第三式——写轮眼拷贝!

memcpy

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

使用memcpy函数时,需要注意:

  • 数据长度(第三个参数)的单位是字节(1byte = 8bit)。
  • 注意该函数有一个返回值,类型是void*,是一个指向destin的指针

 模拟实现memcpy函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{void* ret = dest;assert(dest && src);while (num--) {*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}
int main()
{int a[] = { 1,2,3,4,5 };int b[10] = { 0 };my_memcpy(b, a, 20);return 0;
}

 拷贝成功!

相关文章:

教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数

如何成为一个集雷切&#xff0c;写轮眼侦查和拷贝与一身的卡卡西&#xff0c;下面教你&#xff01; 目录 第一式——雷切&#xff01; strtok 第二式——写轮眼侦查&#xff01; strerror函数 第三式——写轮眼拷贝&#xff01; memcpy 模拟实现memcpy函数 &#x1f60e;…...

【LeetCode】剑指 Offer(24)

目录 题目&#xff1a;剑指 Offer 47. 礼物的最大价值 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer 47. 礼物的…...

javaEE 初阶 — CSS 元素的显示模式与盒模型

文章目录1. 元素的显示模式1.1 块级元素1.2 行内元素1.3 行内元素和块级元素的区别1.4 改变显示模式2. 盒模型2.1 边框2.1.1 边框的粗细2.1.2 边框的颜色2.1.3 边框的风格2.2 内边距2.3 外边距2.3.1 margin 的特殊情况1. 元素的显示模式 1.1 块级元素 常见的元素: h1 - h6 、…...

新星计划-我为什么要写博客?写博客的意义是什么

CSDN的各位友友们你们好,今天千泽要和大家交流一下写博客的意义,并且鼓励大家参加CSDN官方举办的新星计划,这个可以让我们更快的成长,十分有价值.接下来让我们一起开始吧!如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!&#x1f6a9;part1:自我介绍我是一名来自…...

嵌入式学习笔记——STM32的USART收发字符串及串口中断

USART收发字符串及串口中断前言字符串的收发发送一个字符串接收字符串需求利用串口实现printf中断中断是什么前言 上一篇中&#xff0c;介绍了串口收发相关的寄存器&#xff0c;通过代码实现了一个字节的收发&#xff0c;本文接着上面的内容&#xff0c;通过功能函数实现字符串…...

数据分析之Pandas(1)

3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选…...

17、江科大stm32视频学习笔记——USART串口协议和USART串口外设

目录 1、通信接口 2、 硬件电路 3、电平标准 4、串口参数及时序 5、USART简介 6、USART工作 &#xff08;1&#xff09;写操作 &#xff08;2&#xff09;读操作 &#xff08;3&#xff09;帧头和帧尾的添加和除由电路自动执行 &#xff08;4&#xff09;硬件数据控制…...

leetcode:有效地括号

给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都…...

四等分list

Testpublic void s (){ int targ 4; List mList new ArrayList(); List<List> mEndList new ArrayList<>(); for (int i 0; i <34; i) { mList.add(“item” i); } // System.out.println(mList.toString()); if (mList.size() % targ ! 0) { for (int j …...

php连接sqlserver数据库

docker 安装sqlserver数据库sudo docker pull mcr.microsoft.com/mssql/server:2017-latestsudo docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORD<YourStrongPassw0rd>" -p 1433:1433 --name sqlserver --hostname sqlserver -d mcr.microsoft.…...

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

Problem - F - Codeforces 翻译&#xff1a; 哈尔滨&#xff0c;这个名字最初是一个满语单词&#xff0c;意思是“晒渔网的地方”&#xff0c;从松花江边的一个小农村居民点发展成为中国东北最大的城市之一。1898年&#xff0c;随着中国东部铁路的到来&#xff0c;这座城市首先…...

Maven的下载和配置

一、前言 一般按要求下载jar ,但是jar 包版本不好控制。有时候就会jar版本不同导致项目运行的结果也有差异&#xff0c;这样在团队开发中&#xff0c;在多个项目开发的是&#xff0c;jar包还要进行拷贝&#xff0c;可能也会出现版本还jar损坏的情况&#xff0c;所以一个能统一…...

服务高并发、高性能、高可用实现方案

服务高并发、高性能、高可用实现方案 软件开发的三高指标&#xff1a;高并发、高性能、高可用。 高并发方面要求QPS 大于 10万&#xff1b;高性能方面要求请求延迟小于 100 ms&#xff1b;高可用方面要高于 99.99%(4个9) 一、高并发&#xff1a; 高并发是现在互联网分布式框架设…...

uniCloud在线升级APP配置教程

app在线升级背景实现思路流程流程背景 因用户需要添加手机h5页面来进数据操作实现思路流程 实现流程图流程 相关文档&#xff1a;帮助文档 https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html 注册服务空间 https://unicloud.dcloud.net.cn/pages/login/login uni升级…...

idea常用的快捷键

idea常用的快捷键Alt回车 导入包,自动修正CtrlN 查找类CtrlShiftN 查找文件CtrlAltL 格式化代码CtrlAltO 优化导入的类和包AltInsert 生成代码(如get,set方法,构造函数等)CtrlE或者AltShiftC 最近更改的代码CtrlR 替换文本CtrlF 查找文本CtrlShiftSpace 自动补全代码Ctrl空格 代…...

全志V85x硬件设计大赛作品精选第一期,快来Pick你心目中的最佳方案

1、V853-智能交互摄像头开发板 该参赛作品基于全志V853开发板制作的一款类似眼镜外挂的小产品&#xff0c;可以对场景进行辅助识别&#xff0c;并通过云端交互实现物联网控制&#xff0c;进一步实现物联网与人机交互的融合。 开发板配置了摄像头和小屏幕接口&#xff0c;并外…...

博客系统(界面设计)

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录实现博客列表页预期效果导航栏页面主体左右布局左侧区域右侧区域完整代码实现博客详情页预期效果导航栏 左侧右侧完整代码实现…...

素材要VIP咋整?看python大展神通

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 再我们缺少素材的时候&#xff0c;我们第一反应 我们肯定会去网上寻找&#xff0c;但是&#xff01;&#xff01; 有的素材需要VIP&#xff01;这可咋整呢&#xff1f; 看我利用python大展神通&#xff0c;采集某图网图片…...

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-1 通关详解 (附靶机搭建教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

软件测试文档编写步骤

编写软件测试文档是软件测试中非常重要的一部分。以下是编写软件测试文档的一些常见步骤&#xff1a; 1.明确软件测试的目标和目的&#xff1a;在开始编写软件测试文档之前&#xff0c;需要明确测试的目标和目的。这包括定义测试的范围&#xff0c;测试的目标和测试的优先级。 …...

SpringCloud Eureka停更了,我为什么还在用它做微服务注册中心?

SpringCloud Eureka停更后&#xff0c;为什么它仍是微服务架构的隐秘王牌&#xff1f; 当Netflix在2018年宣布停止维护Eureka时&#xff0c;整个Java微服务社区都为之震动。五年过去了&#xff0c;这个"过时"的组件却依然活跃在众多企业的生产环境中。上周我参与了一…...

这份榜单够用!AI论文网站深度测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

Crossplane认证考试指南:备考资源与实战题解析

Crossplane认证考试指南&#xff1a;备考资源与实战题解析 【免费下载链接】crossplane Crossplane 是一个开源的资源抽象层&#xff0c;用于管理多云计算资源&#xff0c;支持混合云和多云环境。 * 资源抽象层、多云和混合云环境管理 * 有什么特点&#xff1a;支持多种云服务提…...

别再为长文档发愁了!用DeepSeek-OCR + 单块A100,5步搞定古籍/财报批量识别

单块A100实战指南&#xff1a;用DeepSeek-OCR高效处理古籍与财报的5个关键步骤 当某省级图书馆需要数字化10万页明清古籍时&#xff0c;技术团队发现传统OCR方案需要3个月才能完成&#xff0c;而采用DeepSeek-OCR配合单块A100的方案&#xff0c;仅用11天就交付了准确率92%的数…...

GlitchTip:开源错误追踪平台完全指南:Sentry替代方案的完整教程

GlitchTip&#xff1a;开源错误追踪平台完全指南&#xff1a;Sentry替代方案的完整教程 背景 在应用开发和运维过程中&#xff0c;错误追踪是保障服务质量的关键环节。Sentry 作为业界领先的错误追踪服务&#xff0c;提供了强大的错误收集和分析能力&#xff0c;但其云服务版…...

SleeperX:Mac电源管理的智能守护者,让每一次工作都不被打断

SleeperX&#xff1a;Mac电源管理的智能守护者&#xff0c;让每一次工作都不被打断 【免费下载链接】SleeperX MacBook prevent idle/lid sleep! Hackintosh sleep on low battery capacity. 项目地址: https://gitcode.com/gh_mirrors/sl/SleeperX 您是否经历过这样的时…...

OpenClaw版本升级:GLM-4.7-Flash环境无缝迁移指南

OpenClaw版本升级&#xff1a;GLM-4.7-Flash环境无缝迁移指南 1. 为什么需要升级&#xff1f; 上周我在本地开发环境遇到一个棘手问题&#xff1a;OpenClaw的旧版本无法正确解析GLM-4.7-Flash模型返回的JSON响应。经过排查发现是框架对数组嵌套结构的处理存在兼容性问题。这促…...

5分钟搞定多聚焦图像融合:从数据集到评价指标全流程指南

5分钟搞定多聚焦图像融合&#xff1a;从数据集到评价指标全流程指南 多聚焦图像融合技术正逐渐成为计算机视觉领域的热门研究方向。这项技术通过将多张聚焦区域不同的图像合成为一张全清晰的图像&#xff0c;解决了单次拍摄无法同时捕捉场景中所有物体清晰细节的难题。对于刚接…...

Qwen3.5-4B-Claude-Opus惊艳效果展示:同一问题下普通回答vs结构化推理对比

Qwen3.5-4B-Claude-Opus惊艳效果展示&#xff1a;同一问题下普通回答vs结构化推理对比 1. 模型能力概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个经过特殊优化的推理模型&#xff0c;它在标准问答能力的基础上&#xff0c;重点强化了结构化分析和分步骤推理…...

Python调用SM9遭遇“Unknown curve”?紧急修复手册:从OpenSSL 3.0.7到国密SM9曲线OID映射全对照

第一章&#xff1a;Python调用SM9遭遇“Unknown curve”问题的根源定位当使用 Python&#xff08;如通过 cryptography 或 gmssl 库&#xff09;实现国密 SM9 算法时&#xff0c;常见报错 ValueError: Unknown curve 并非源于椭圆曲线参数缺失&#xff0c;而是因底层密码学库未…...