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

news2024/10/3 4:38:07

目录

前言

接上篇:

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.coloradmin.cn/o/1471729.html

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

相关文章

生成式 AI - Diffusion 模型的数学原理(5)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a; https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 讲到这里还没有解决的问题是&#xff0c;为什么这里还要多加一个噪声。Denoise模型算出来的是高斯分布的均…

根据前序后序遍历求出二叉树

根据前序后序遍历求出二叉树 一、题目描述 给定两个整数数组&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一个具有 无重复 值的二叉树的前序遍历&#xff0c;postorder 是同一棵树的后序遍历&#xff0c;重构并返回二叉树。 二、题目分析 需求&#xff…

成都直播基地作为产业重要载体,引领直播行业健康、多元发展

近年来&#xff0c;我国网络直播行业呈现出井喷式的发展态势。众多直播平台如雨后春笋般涌现&#xff0c;直播内容丰富多样&#xff0c;涵盖游戏、电竞、美食、旅游、教育等多个领域。同时&#xff0c;成都直播产业园规模持续扩大&#xff0c;产业不断完善&#xff0c;整体呈现…

如何在Win系统搭建Oracle数据库并实现远程访问【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

基于Java SSM框架实现高考填报信息系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现高考填报信息系统演示 JAVA简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;JSP&#xff08;java serv…

【前沿热点视觉算法】-带有信道坐标注意特征融合模块的双光谱语义分割网络

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 带有信道坐标注意特征融合模块的双光谱语义分割网络 2 论文摘要 双光谱&#xff08;RGB-hehtir&#xff09;语义分割是在恶劣成像环境&#xff08;如黑暗、雨、雾&#xff09…

SpringCloud Alibaba 2022之Nacos学习

SpringCloud Alibaba 2022使用 SpringCloud Alibaba 2022需要Spring Boot 3.0以上的版本&#xff0c;同时JDK需要是17及以上的版本。具体的可以看官网的说明。 Spring Cloud Alibaba版本说明 环境搭建 这里搭建的是一个聚合项目。项目结构如下&#xff1a; 父项目的pom.xm…

还不知道随身WiFi这个蓝海市场怎么做?这个一定要看!适合30-40岁轻资产小生意

有没有发现你身边的人最近都在失业&#xff1f;无论是国企的、事业编的、又或者是民营企业的都在欠薪或者失业&#xff0c;看来经济寒潮是真的来了。虽然经济大环境不好&#xff0c;但是仍然涌现出了物联网、人工智能、大数据等新兴的蓝海市场。可是很多创投圈的朋友都表示&…

力扣随笔之按奇偶排序数组(简单905)

思路1&#xff1a;根据双指针对撞指针的思路&#xff0c;定义一个左指针从数组前端开始遍历&#xff0c;定义一个右指针从后端开始遍历&#xff0c;这时候有四种情况 左奇右偶&#xff1a;这种情况需要将其位置交换&#xff0c;将偶数提前&#xff0c;奇数后移左奇右奇&#xf…

如何优化小程序关键词,提高搜索结果排名

在数字化时代&#xff0c;小程序作为一种轻量级的应用形态&#xff0c;已成为用户获取信息、享受服务的重要渠道。然而&#xff0c;随着小程序数量的不断增加&#xff0c;如何在搜索结果中脱颖而出&#xff0c;成为了每一个小程序开发者需要面对的问题。其中&#xff0c;关键词…

LeetCode 0235.二叉搜索树的最近公共祖先:用搜索树性质(不遍历全部节点)

【LetMeFly】235.二叉搜索树的最近公共祖先&#xff1a;用搜索树性质&#xff08;不遍历全部节点&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公…

软硬协同设计下的飞天盘古,是如何降低存储系统开销的?

云布道师 经过十几年的技术演进&#xff0c;阿里巴巴已经实现了统一存储的目标——即以“飞天盘古”系统作为统一底座&#xff0c;通过标准化、服务化和开放化的方式建立了完整的存储产品和服务体系&#xff0c;服务广大内部和外部客户。 “万古乾坤心上辟&#xff0c;于令日…

x86使用execve执行一个elf文件并传递参数--代码思路分析

execve(const char *filename, char *const argv[ ], char *const envp[ ]) 视频教程以及实际代码可以看这一个教程 其他的需要的知识 GDT表 GDT表虚拟内存 页表 任务切换 fork实现 elf文件加载 这一个是一个Linux下面的标准接口 这一个的实际作用的是执行一个可执行文件 把当…

用最直观的方式解释:什么是零信任?

在网络安全领域&#xff0c;零信任&#xff08;Zero Trust&#xff09;是一种新兴的安全模型&#xff0c;旨在提高网络安全防御的效果。零信任的核心理念是不信任任何人或设备&#xff0c;即使是内部的用户或设备也不例外。这一概念可以通过一个简单易懂的故事来解释。 很久以…

Opencv(2)深浅拷贝与基本绘图(c++python

Opencv(2)深浅拷贝与基本绘图 文章目录 Opencv(2)深浅拷贝与基本绘图三、深浅拷贝四、HSV色域(1).意义(2).cvtColor()(3).inRange()(4).适应光线 三、深浅拷贝 浅拷贝是指当图像之间进行赋值时&#xff0c;图像数据并未发生复制&#xff0c;而是两个对象都指向同一块内存块。 …

NCDA视觉传达设计大赛终极攻略:助你斩获佳绩

第十二届全国高校未来设计师数字艺术设计大赛&#xff08;NCDA&#xff09; A类&#xff1a;视觉传达设计 参赛对象&#xff1a; 大学生小组&#xff1a;分①研究生组②本科生组③专科生组&#xff0c;三组分别进行评审 教师小组&#xff1a;普通高校教师&#xff0c;不分小…

森歌集成灶:以冠军标准打造健康厨房,为全民健康保驾护航

在2024年这个实施“十四五”规划的关键之年&#xff0c;健康话题无疑是公众最为关注的焦点之一。随着国家卫健委最新发布的《2022年中国居民健康素养监测情况》报告显示&#xff0c;我国居民健康素养水平稳步提升&#xff0c;厨电高端品牌森歌响应国策、顺应潮流将于2月27日-2月…

【Golang】Golang使用embed加载、打包静态资源文件

【Golang】Golang使用embed加载、打包静态资源文件 大家好 我是寸铁&#x1f44a; 总结了一篇Golang使用embed加载静态资源文件的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 事情是这样的&#xff1a;前不久&#xff0c;有同学问我,golang怎么把静态资源文件打包成一…

ReentrantLock详解-可重入锁-默认非公平

ReentrantLock是Java中的一个可重入锁&#xff0c;也被称为“独占锁”。它基于AQS&#xff08;AbstractQueuedSynchronizer&#xff09;框架实现&#xff0c;是JDK中提供的一种线程并发访问的同步手段&#xff0c;与synchronized类似&#xff0c;但具有更多特性。 ReentrantLo…

开发一套智慧工地系统需要多少钱?

智慧工地是智慧地球理念在工程领域的行业具现&#xff0c;是一种崭新的工程全生命周期管理理念。它运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生…