字符函数和字符串函数(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.hqwc.cn/news/492211.html

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

相关文章

某电力铁塔安全监测预警系统案例分享

项目概述 电力铁塔是承载电力供应的重要设施&#xff0c;它的安全性需要得到可靠的保障。但是铁塔一般安装在户外&#xff0c;分布广泛&#xff0c;且有很多安装在偏远地区&#xff0c;容易受到自然、人力的影响和破环。因此需要使用辅助的方法实时监控铁塔的安全状态&#xff…

使用GPT生成python图表

首先&#xff0c;生成一脚本&#xff0c;读取到所需的excel表格 import xlrddata xlrd.open_workbook(xxxx.xls) # 打开xls文件 table data.sheet_by_index(0) # 通过索引获取表格# 初始化奖项字典 awards_dict {"一等奖": 0,"二等奖": 0,"三等…

HarmonyOS—代码Code Linter检查

Code Linter代码检查 Code-Linter针对ArkTS/TS代码进行最佳实践、编程规范方面的检查&#xff0c;目前还会检查ArkTS语法规则。开发者可根据扫描结果中告警提示手工修复代码缺陷&#xff0c;或者执行一键式自动修复&#xff0c;在代码开发阶段&#xff0c;确保代码质量。 检查…

第四节:Vben Admin登录对接后端getUserInfo接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 第三节&#xff1a;Vben Admin登录对接后端login接口 第四节&#xff1a;Vben Admin登录对接后端getUserInfo接口 文章目录 系列文章目录前言一、回顾Vben…

C语言内存管理-栈内存

栈内存 什么东西存储在栈内存中&#xff1f; 环境变量命令行参数局部变量&#xff08;包括形参&#xff09;栈内存有什么特点&#xff1f; 空间有限&#xff0c;尤其在嵌入式环境下。因此不可以用来存储尺寸太大的变量。每当一个函数被调用&#xff0c;栈就会向下增长一段&…

Codeforce Monsters Attack!(B题 前缀和)

题目描述&#xff1a; 思路&#xff1a; 本人第一次的想法是先杀血量低的第二次想法是先搞坐标近的第三次想法看到数据量这么大&#xff0c; 我先加个和看看貌似我先打谁都行&#xff0c;由此综合一下&#xff0c; 我们可以把每一个不同的坐标当作一轮从最小的坐标开始&#x…

适合新手博主站长使用的免费响应式WordPress博客主题JianYue

这款JianYue主题之所以命名为 JianYue&#xff0c;意思就是简单而不简约的。是根据Blogs主题优化而成&#xff0c;剔除了一些不必要的功能及排版&#xff0c;仅保留一种博客布局&#xff0c;让新手站长能够快速手上WordPress。可以说这款主题比较适合新手博主站长使用&#xff…

Programming Abstractions in C阅读笔记:p293-p302

《Programming Abstractions in C》学习第73天&#xff0c;p293-p302总结&#xff0c;总计10页。 一、技术总结 1.时间复杂度 (1)quadratic time(二次时间) p293, Algorithms like selection sort that exhibit O(N^2) performance are said to run in quadratic time。 2…

新鲜出炉 | 2024年六西格玛学习路线

一、入门篇&#xff1a;了解六西格玛的基本概念与核心原理 六西格玛的起源与发展&#xff1a;了解六西格玛的历史背景和发展过程&#xff0c;有助于我们更好地认识这一管理方法的优势和特点。 六西格玛的核心概念&#xff1a;学习六西格玛中的DMAIC&#xff08;定义、测量、分…

基于YOLOv5+PySide6的火灾火情火焰检测系统设计深度学习

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225火灾 获取完整源码源文件已标注的数据集&#xff08;1553张&#xff09;配置跑起来说明 可有偿49yuan一对一远程操作&#xff0c;在你电脑跑起来 效果展示&#xff1a; ​数据集在下载的文件夹&#xff1a;yolov5-5.0\…

在独立Unity工程中集成Vortex Studio

本文首发于&#xff1a;Unity3D入门教程09.01&#xff1a;在独立Unity工程中集成Vortex Studio 目的 在Unity中使用Vortex Studio引擎模拟Unity场景中的任何资源。 工程 打开桌面Unity Hub快捷方式 点击Open选择需要打开的工程&#xff0c;这里选择官方提供的默认工程C:\CM…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …