字符函数和字符串函数(C语言进阶)(三)

目录

前言

接上篇:

1.7 strtok

1.8 strerror

1.9 字符分类函数

总结


前言

        C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。

        字符串常量适用于那些对它不做修改的字符串函数。

接上篇:

1.7 strtok

        此函数用于切割字符串

        看一个例子来理解:

#include <stdio.h>
#include <string.h>
int main()
{const char* sep = "@.";char email[] = "pengxiaoyao@csdn.com";char cp[30] = {0};strcpy(cp, email);char* ret = strtok(cp, sep);printf("%s\n", ret);ret = strtok(NULL, sep);printf("%s\n", ret);ret = strtok(NULL, sep);printf("%s\n", ret);return 0;
}

效果如下: 

        strtok是用于分割字符串的函数,它的参数有两个,第一个是传过去的是需要分割的字符串,在这个例子里面就是“pengxiaoyao@csdn.com”,第二个参数是分割标记,上面的例子传过去的是一个指针,内容为“@.”,有多少个分割标记就在里面放多少个元素。需要注意的是,我们需要将被分割的字符串拷贝一份作为参数传递,因为strtok函数作用会改变被分割的字符串的内容。

        下面是使用方法介绍,我们在例子中可以看到,我第一次先将cp(需要分割的字符串的拷贝)和sep(分割标记)传参过去,这样就能执行第一次分割,结果就为“pengxiaoyao”;然后第二次我们进行分割时,传参传了NULL和分割标识sep,这是因为在第一次分割后,字符串第一个被找到的标识“@”被改成了‘\0’,我们传一个NULL是作为一个标志,告诉strtok函数这不是第一次分割,是接着上一次分割往下继续。因此,我们使用strtok函数,除了第一次传递被分割字符串地址,后面都用NULL即可。第二次分割输出值为"csdn",即'@'和'.'之间的内容,第三次分割同理,得到最后的"com"。

        提问,明明NULL指针什么都没指向,那strtok怎么找到的地址进行处理呢?

        其实是因为这个函数在第一次被调用后,就记下了被分割的字符串的地址,这个函数是有记忆功能的。什么原理?用到了静态变量可以实现。

1.8 strerror

        strerror叫错误报告函数。功能是返回错误码所对应的信息。

        c语言三的函数库,在执行失败的时候,都会设置错误码:0 1 2 3 4 5 6 7 8....每一种数字都代表一种错误信息,0代表没有错误,1代表一种类型的错误,2代表另一种....

        但是我们只知道错误码,不清楚里面的信息,于是我们可以将错误码传给strerror函数,它就会返回错误信息。

        举个例子:

#include <stdio.h>
#include <string.h>
int main()
{printf("%s\n", strerror(0));printf("%s\n", strerror(1));printf("%s\n", strerror(2));printf("%s\n", strerror(3));printf("%s\n", strerror(4));printf("%s\n", strerror(5));printf("%s\n", strerror(6));return 0;
}

看此代码输出:

        说明0代表no error(没有错误);1代表Operation not permitted(操作不允许).....以此类推3 4 5 6 的错误信息都打印了出来。

1.9 字符分类函数

        这些函数比较易懂,就不举例了。

总结

        到此就将所有的字符串函数讲解完成了,希望对你有所帮助!

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

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

相关文章

安卓开发1- android stdio环境搭建

安卓开发1-android stdio环境搭建 Jdk环境搭建 1. 准备Jdk,这边已经准备好了jdk1.8.0,该文件直接使用即可 2. 系统变量添加 %JAVA_HOME%\bin JAVA_HOME 3. 系统变量&#xff0c;Path路径添加 4. 添加完成后&#xff0c;输入命令javac / java -version&#xff0c;验证环…

Java多线程算法总结

1. 标题三个线程同时运行&#xff0c;依次打印ABC&#xff0c;一共打印10次 算法代码如下&#xff1a; public class ThreadTest {private Object oa new Object();private Object ob new Object();private Object oc new Object();private static final String TAG &quo…

【精选】Java项目介绍和界面搭建——拼图小游戏 中

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

LeetCode 刷题 [C++] 第148题.排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 题目分析 根据题意&#xff0c;可以使用归并排序来对链表进行排序。归并排序是基于分治的思想&#xff0c;比较容易实现的就是自顶向下的递归方式来实现。 先找出链表的中点&#x…

游泳耳机哪个牌子质量好?4大高口碑产品推荐入手

游泳耳机作为一种专业的水上音频装备&#xff0c;能够使游泳者在游泳过程中享受音乐的同时保持安全和舒适。随着科技的发展&#xff0c;市面上涌现出许多品牌和型号的游泳耳机&#xff0c;但是其中哪个牌子的质量更好呢&#xff1f;下面这篇文章将为大家介绍四大热门口碑产品&a…

2-23 switch、JVM内存模型、垃圾回收机制、this、static、变量的分类

文章目录 switch 实现成绩评级JVM内存模型概念栈的特点堆的特点 垃圾回收机制通用的分代垃圾回收机制三种清理算法垃圾回收过程垃圾回收常见的两种检测引用算法内存泄露常见原因 this的用法创建对象的四步 static 静态特点 变量的分类和作用域import switch 实现成绩评级 switc…

单点故障解决方案之Smart Link与Monitor Link

-SmartLink技术&#xff0c;创建Smart Link 组。在该组中&#xff0c;加入两个端口。其中1个端口是主端口&#xff0c;也称之为Master端口。另外1个端口是备份端口:也称之为 Slave 端口。 -Monitor Link 组也称之为“监控链路组&#xff0c;由上行端口和下行端口共同组成。下行…

SDR架构 (二) 为什么很多SDR频谱中间有尖峰?

相信大家第一次打开gnuradio看听广播、看频谱的时候&#xff0c;会注意到一个奇怪的现象&#xff0c;明明在频谱中间不该有信号&#xff0c;但是实际看到了一个尖峰。这个尖峰不含带任何信息&#xff0c;并且不管调节到哪个中心频率&#xff0c;这个尖峰都会存在。 这种情况出…

达梦数据库把日志数据按天统计不同状态的数据,实现字段行转列与根据id分组

1、这是日志表记录的数据&#xff0c;现在需要统计出每个app_id各个警告类型alarm_type的总数 2、先实现行转列&#xff0c;把三个alarm_type值转成列字段 SQL select app_id,count(CASE WHEN alarm_typeconcurrency THEN 1 ELSE null END) AS currentCount,count(CASE WHEN …

期货开户保证金保障市场正常运转

期货保证金是什么&#xff1f;在期货市场上&#xff0c;采取保证金交易制度&#xff0c;投资者只需按期货合约的价值&#xff0c;交一定比率少量资金即可参与期货合约买卖交易&#xff0c;这种资金就是期货保证金。期货保证金&#xff08;以下简称保证金〕按性质与作用的不同。…

Docker 第十九章 : 阿里云个人镜像仓使用

Docker 第十九章 : 阿里云个人镜像仓使用 本章知识点: 如何创建镜像库,如何设置密码,如何登录与退出个人镜像仓,如何本地打镜像,如何将本地镜像推送到个人镜像库。 背景 在项目YapiDocker部署中,因读取mongo:latest 版本不一致,导致后续执行步骤的异常。遇到此场景…

在UniApp中引入大于40kb字体包的记录

因为项目UI需要特殊字体&#xff0c;所以给了一个80kb字体包&#xff0c;但是在正常的使用导入时候发现不生效 这是我的导入过程 1.把下载好的文件放入static/font目录中 2.在app.vue中引用 font-face { font-family: zitiming; src: url(/static/font/YouSheBiaoTiHei-2.t…

Matlab进阶绘图第41期—双三角网格曲面图

在《Matlab论文插图绘制模板第67期—三角网格图(Trimesh)》中&#xff0c;我分享过三角网格曲面图的绘制模板。 然而&#xff0c;有的时候&#xff0c;需要在一张图上绘制两个及以上的三角网格曲面图&#xff0c;且每个三角网格曲面图使用不同的配色方案。 在Matlab中&#x…

使用Axure RP并配置IIS服务结合内网穿透实现公网访问本地HTML原型页面

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

NC65 零预算控制规则 数据库表关系

NC65 零预算控制规则 数据库表关系 SELECT t1.createdby, t1.objname, t2.ctrlname, t2.pk_parent, t3.billtype, t3.nameidx, t3.pk_obj FROM tb_rule_formula t1 left join tb_ctrlformula t2 on t1.pk_obj t2.pk_parent left join tb_ctrlscheme t3 on t3.pk_ctrlformula …

如果大数据中多头借贷风险严重怎么办呢?

在大数据报告中&#xff0c;多头借贷风险、逾期风险、联系人风险、司法风险等是大数据评分评级的重要组成部分&#xff0c;大数据多头借贷风险也是很多银行和金融平台比较看重的&#xff0c;那如果大数据中多头借贷风险严重怎么办呢?本文详细为大家讲讲。 大数据多头风险是什么…

[JavaWeb玩耍日记]Mybatis快速入门与增删改查

目录 模块一&#xff1a;快速入门 1.创建数据库&#xff0c;插入数据 2.创建maven模块后&#xff0c;需要导入的依赖有哪些&#xff1f; 3.想要输出查询到的数据(包括日志打印)&#xff0c;需要创建哪些文件&#xff1f; 4.如何放置UserMapper接口与User类&#xff1f; 5.…

林浩然与杨凌芸的Scala奇遇记:从Java王国到函数式编程乐园

林浩然与杨凌芸的Scala奇遇记&#xff1a;从Java王国到函数式编程乐园 在那个代码编织而成的世界里&#xff0c;我们的主人公林浩然和杨凌芸&#xff0c;两位Java领域的编程高手&#xff0c;正在寻找新的挑战。他们曾一起探索过Java丛林中的Lambda表达式的奥秘&#xff0c;也曾…

配置资源管理Secret

目录 一、什么是Secret? 二、secret的三种类型 三、pod适用secret的三种方式 四、secret实例 1、创建secret 2、使用Secret方式 一、什么是Secret? Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;目的是为了更方便的控制使用数据&#xff0c;并…

GDB动态调试学习-2-【断点】

文章目录 在程序地址上打断点在程序入口处打断点获取程序入口地址 在命名空间设置断点命名空间给命名空间的函数下断电 在文件行号上打断点保存已经设置的断点设置临时断点设置条件断点command指令 忽略断点 在程序地址上打断点 当调试汇编程序&#xff0c;或者没有调试信息的…