C语言王国——字符函数和字符串函数(2)

目录

5 strtok函数

5.1 函数的表达式

5.2 函数模拟

6 strstr函数

6.1 函数表达式

7 strerror函数

7.1 函数表达式

7.2 例子

 7.3 perror

8 strncpy、strncat、strncmp函数

四 结论


5 strtok函数

strtok函数我的理解是他是一个分割字符串的函数

5.1 函数的表达式

char* strtok( char* str, const char* sep);

*注意:

  1. sep指向一个字符串,此字符串为分隔符的字符集合。谨记sep是字符串,分隔字符的集合,就是说把分隔字符集中在sep中。
  2. strtok函数会在str字符串中找到下一个sep中的分隔字符,将其变为'\0',并且返回一个指向这个标记的指针。(这是strtok函数第一个参数不为NULL的情况)
  3. 诺第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  4. 如果字符串不存在更多的标记,则返回NULL指针。
  5. 注意strtok函数会改变被操作的字符串,所以此函数分隔的字符串一般都是临时拷贝的内容并且是可以修改的。

5.2 函数模拟

 "Hello world_xxxx"中空格和'_'为分隔符

#include <stdio.h>
#include <string.h>int main()
{char arr[] = "hello world_xxxx";char* sep = " _";char* str = NULL;for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep)){printf("%s\n", str);}return 0;
}


6 strstr函数

此函数是一个函数在另外一个函数中第一次出现的位置。

6.1 函数表达式

char* strstr( const char* str1,const char* str2);

*字符串的比较匹配不包含\0,以\0作为结束标志。


7 strerror函数

此函数就是可以把参数部分错误码对应的信息以字符串地址返回。

7.1 函数表达式

char* strerror( int errnum );

因为这个概念比较官方所以我就用引用大佬的话了:

在不同的系统和C语言标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头文件中说明 的,C语言程序启动的时候就会使用⼀个全面的变量errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应 的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

什么意思呢?那就让姜糖给各位总结一下吧:

  • 要包含头文件errno.h
  • 此头文件中会用一个变量errno来记录程序错误码
  •  启动时为0表示没有错误,而一旦有错误,errno中的值就会于头文件中的字符串相对应方便我们理解。

7.2 例子

那就来举个例子方便大家理解吧;

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <string.h>
#include <errno.h>int main()
{FILE* pFile;pFile = fopen("unexist.ent", "r");if (pFile == NULL)printf("Error opening file unexist.ent: %s\n", strerror(errno));return 0;
}

 该指令是让我们以只读模式去打开一个"unexist.ent”文件但是此时我们是没有这个文件的,当此操作错误的时候,错误码对应的值就会赋给errno,然后我们判断pFile是否为NULL,也就是判断程序是否错误,然后我们再用strerror打印该错误。让我们运行一下来看看吧。

 7.3 perror

既然讲到了strerror函数那我在这里提一提另外一个函数吧那就是perror函数,他也是打印错误代码的原因的只不过strerroe是这么表示的:

printf("Error opening file unexist.ent: %s\n", strerror(errno));

而perror是这么表示的 :

perror("Error opening file unxist.ent");

perror的输入结果如下:

 

对比于strerror函数,perror函数打印完参数部分的字符串后,再打印一个冒号和一个空格,再打印错误信息。


8 strncpy、strncat、strncmp函数

为什么我在这里把这三个函数一起进行介绍呢因为这个函数和我前面介绍的有三个函数用法差不多,接下来就让我先来写一下他们的函数表达式吧:

char* strncpy( char* destination, const char* source, size_t num);
char* strncat( char* destination, const char* source, size_t num);
int strncmp( const char* destination, const char* source, size_t num);

有没有发现他们和前面代码的相似之处?——多了一个num,那么这个num变量有什么用呢?

strncpy函数中:规定原代码的拷贝的个数,诺原来字符串不足num个,则拷贝完后追加0,直到num个。

strncat:将原字符串前num个字符拷贝到目标函数后,诺原字符串不足num个则只追加原字符串中字符的个数。

strncmp中:比较前num个是否相等,其他一样。


四 结论

字符串函数中的使用都要包含头文件string,这里模拟函数只是给大家一种参考不一定完成一样,但利于大家理解,这些库函数也是人写的,他们这些程序员能做到的事情,为什么我们不能做到。那大家就一起跟随姜糖的脚步一步步成为大牛吧。谢谢大家的支持!希望大家发现姜糖的问题及时给姜糖指出来也别忘了一键三连哦。

大家如果对这些函数有兴趣,想知道姜糖是在哪里找的大家可以看看姜糖最初的文章里面推荐了一个网址https://legacy.cplusplus.com/,这个是专门用来查函数和库的。

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

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

相关文章

StartAI:AI扩图功能,让设计更高效

在数字设计领域&#xff0c;图像的清晰度和细节至关重要。StartAI作为领先的AI设计工具&#xff0c;不断推出创新功能&#xff0c;以满足设计师们对高质量图像处理的需求。最新推出的扩图功能&#xff0c;结合了“创成式填充”技术和“PS插件”的便捷&#xff0c;为设计师们带来…

深度神红网络——什么是 CNN(卷积神经网络)?

Facebook和Instagram自动检测图像中的面孔&#xff0c;Google通过上传照片搜索相似图片的功能&#xff0c;这些都是计算机视觉技术的实例&#xff0c;它们背后的核心技术是卷积神经网络&#xff08;CNN&#xff09;。那么&#xff0c;CNN究竟是什么呢&#xff1f;接下来&#x…

思维导图-vb.net开发带进度条的复制文件夹功能c#复制文件夹

你们谁写代码会用流程图来做计划&#xff0c;或者写项目总结报告&#xff1f; .net带进度条复制文件夹 方案 列出所有子文件夹&#xff0c;再创建&#xff0c;复制文件 大文件可以单独做进度条 缺点&#xff1a;设计会更复杂 直接…

统一终端管理解决方案有哪些?必须收藏的统一终端管理软件

统一终端管理解决方案&#xff0c;是一种综合性的管理策略&#xff0c;旨在通过集中化的方式&#xff0c;对企业或组织的各种终端设备进行统一的管理、监控、保护和优化。以下是对统一终端管理解决方案的详细介绍。 一、方案概述 统一终端管理解决方案涵盖了从硬件到软件、从网…

[Linux系统编程]文件重定向dup和dup2

一.dup和dup2 实现重定向 1.文件描述符表 操作系统在管理文件时&#xff0c;会管理一张文件描述符表&#xff0c;根据打开的文件&#xff0c;分配一个文件描述符(int)&#xff0c;根据该文件描述符&#xff0c;锁定指向该文件的指针&#xff0c;从而索取文件。 2.重定向 在li…

svg使用 element plus 使用外部下载的svg,使用或作为背景图片的使用方式,svg背景填充自适应父级宽高

friger.vue 注意:引入路径后加#svgView(preserveAspectRatio(none)),可解决宽高设置无效的问题 代码上就这两句就行,它去这个路径下去找@/assets/svgs/login-bg.svg,往这个目录下放svg文件就行<template><div class="parent-container"><el-row…

Python实现连连看6

3.2 生成图片地图 图2所示的界面实际上可以看成是一个1010的二维数组,数组中的每个国旗图片对应一个0-24中的一个值,所以每个值应该有1010(1+24)=4个,也就是该100个国旗中有25种国旗,每种国旗有4个。这种二维数组我们把它叫做图片地图,如图7所示。 图7 图片地图 要生成…

颜色分类 ---- 分治-快排

题目链接 题目: 分析: 运用将"数组分成三块"的思想: 需要定义三个指针: left指向最左侧的区域的最右边, 所以left起始为-1 right指向最右侧色区域的最左边, 所以right起始为nums.length i用来遍历数组这三个指针就将数组分成了四块 [0,left] 为0 [left 1, i] 为1 …

【工具】Vmware17 安装mac(13.6.7)虚拟机

目录 0.简介 1.环境 2.详细步骤 2.1下载mac镜像&#xff08;可以选择你所需要的&#xff09; 2.2 VMware安装 1&#xff09;创建新的虚拟机 2&#xff09;选择【典型】&#xff0c;点击下一步 3&#xff09;选择【安装程序光盘映像文件】&#xff0c;点击浏览&#xff…

服务器的初始化

服务器的初始化 新的服务器到手&#xff0c;部署服务器的初始化。 1、配置ip地址 网关 dns解析&#xff08;static&#xff09;内网和外网 2、安装源&#xff0c;外网&#xff08;在线即可&#xff09;内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区&#…

【python】成功解决“TypeError: ‘method’ object is not subscriptable”错误的全面指南

成功解决“TypeError: ‘method’ object is not subscriptable”错误的全面指南 一、引言 在Python编程中&#xff0c;TypeError: method object is not subscriptable错误是一个常见的陷阱&#xff0c;特别是对于初学者来说。这个错误通常意味着你尝试像访问列表、元组、字典…

2024蓝桥杯初赛决赛pwn题全解

蓝桥杯初赛决赛pwn题解 初赛第一题第二题 决赛getting_startedbabyheap 初赛 第一题 有system函数&#xff0c;并且能在bss上读入字符 而且存在栈溢出&#xff0c;只要过掉check函数即可 check函数中&#xff0c;主要是对system常规获取权限的参数&#xff0c;进行了过滤&…

upload-labs-第一关和第二关

目录 第一关 思路&#xff1a; 1、上传一个php文件 2、查看源码 3、查看文件上传地址 4、BP抓包&#xff0c;修改文件后缀名 5、使用蚁剑连接 第二关 1、这一关也可以跟第一关一样的方法进行绕过 2、上传一个一句话木马文件 第一关 原理&#xff1a; 思路&#xff1a…

高精度滚珠丝杆在自动化生产中的关键因素!

如今&#xff0c;自动化技术正以前所未有的速度改变着人们的生活和工作方式&#xff0c;特别是在高精度精密设备的制造与应用领域&#xff0c;提高生产效率和优化生产流程正变得越来越重要。在自动化生产中&#xff0c;滚珠丝杆的优化应用对于提高生产效率、保证产品质量至关重…

MedSAM 学习笔记(续):利用训练好的权重进行gui的推理

1、介绍 MedSAM 代码复现参考&#xff1a;第一章&#xff1a;MedSAM 视觉大模型介绍_medsam 系统简介-CSDN博客 利用MedSAM迁移学习训练自定义数据集介绍&#xff1a;MedSAM 学习笔记&#xff08;续&#xff09;&#xff1a;训练自定义数据集_sam训练自定义数据-CSDN博客 本文…

leetcode第867题:转置矩阵

matrix[i][j]需要放在转置矩阵的(j,i)位置 public class Solution {public int[][] Transpose(int[][] matrix) {int rows matrix.Length; int columns matrix[0].Length; int[][] array2 new int[columns][];// 初始化内部数组&#xff08;列数&#xff09;for (int i 0…

通过仪器分类方式修订看监测仪器发展新趋势

随着科技的进步和监测需求的不断升级&#xff0c;监测仪器的分类方式亟需与时俱进。本文旨在探讨《混凝土坝监测仪器系列型谱》中对现有仪器分类方式的修订&#xff0c;以及监测仪器发展的新趋势相关内容。 一、仪器分类方式的修订 传统的仪器分类方式往往基于功能、原理或应用…

Linux文本处理三剑客之awk命令

官方文档&#xff1a;https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk&#xff1f; Awk是一种文本处理工具&#xff0c;它的名字是由其三位创始人&#xff08;Aho、Weinberger和Kernighan&#xff09;的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数…

漏洞发现协议代理池GobyAWVSXray

Awvs漏扫-Sadedog-白名单-内置 加入白名单扫描&#xff0c;防Safedog拉黑IP Awws漏扫-BT&Aliyun-代理池-内置 Xray漏扫-BT&Aliyun-Proxifier-.进程 proxifier添加代理服务器 Goby漏扫-BT&Aliyun-Socket5-内置 对于不通过https对网站或操作系统进行信息收集的程…

在Three.js中实现模型点击高亮:整合EffectComposer与OutlinePass的终极指南

效果【后期实现鼠标点击选中轮廓后给出一个弹窗显示相应的模型信息】 标签指示线参考我的上一篇文章 引言 Three.js不仅让WebGL的3D图形编程变得简单易懂&#xff0c;还通过其强大的扩展库支持丰富的后期处理效果&#xff0c;为3D场景增添无限魅力。本篇文章将引导您深入了…