字符串函数(2)<C语言>

前言

        快一周没更博客了,最近有点忙,今天闲下来了,还是不行,继续干,书接上回继续介绍字符串函数:strncpy()、strncat()、strcmp()、strtok()使用、strstr()使用以及模拟实现、strerror()使用。


strncpy()、strncat()、strncmp()

        这几个函数看着很眼熟,用法确实和前文的函数类似,不同的是多出了一个n,也有一些不同。

strncpy()

        函数参数及其返回类型:

char* strncpy(char* destination , const char* source , size_t num);
//返回值是目的字符串的起始地址

作用:

从源字符串中拷贝num个字符串到目的字符串中。

注意点:

①如果num大于源字符长度,在拷贝完源字符串后,在目标字符串中追加\0,直到num个。

②如果num小于源字符长度,在拷贝完指定字符串后,不会在目标字符串中追加\0

使用举例:

 strncat()

        函数参数及其返回类型:

char* strncat(char* destination , const char* source , size_t num);
//返回值是目的字符串的起始地址

作用:

从源字符串中追加前num个字符串到目的字符串中,再追加个\0。

注意点:

①如果num大于源字符长度,只会将源字符串中到\0的字符串追加到目的字符串末尾。

②相较于strcat()函数,strncat()可实现自追加(先用strlen()函数求出字符串长度,再追加),原因也很简单,strncat()每次追加完毕会自动追加一个\0。

使用举例:

  strncmp()

        函数参数及其返回类型:

int strncat(const char* str1, const char* str2 , size_t num);
//返回值是大于:大于0的数、等于:0、小于:小于0的数

作用:

比较str1与str2前num个字符

注意点:

使用举例:


 strtok()使用

        函数参数及其返回类型:

char* strtok(char* str, const char* sep );
//返回值是指向找到以sep中的字符分隔的字符串的首地址,如果没找到返回NULL

作用:

找到第一次以sep字符串中的字符分隔的字符串的首地址

注意点:

①sep参数中定义了分隔字符串的集合,也就是说可以为多个分隔字符且可以无序

②当找到第一个以sep中字符分隔的字符串时,将分隔字符以\0替代(strtok()函数会改变源字符,所以一般会使用一个临时变量来接收,不改变源字符)

③strtok()函数具有记忆性(含有static关键字),所以当多次调用strtok()函数时,可将多个字段打印出来

④如果找不到以sep字符串中的字符分隔的字符串,就返回NULL

⑤strtok()函数第一个参数为NULL时,函数将在同一个字符保存的位置找下一个字段

使用举例:

//strtok()函数举例
#include<string.h>
int main() {char str[20] = "192.91.89.7";//以“.”分隔的字符串char* sep = ".";//分隔字符(可以为多个)char* ret = NULL;for (ret = strtok(str, sep); ret != NULL;ret=strtok(NULL,sep))//初始化表达式只执行一次,取出第一个字段:ret = strtok(str, sep)//条件表达式用于判断是否为NULL,为NULL则找不到了:ret != NULL//更新表达式用于查找下一个字段,第一个参数为NULL时,会从上一次分隔位置查找:ret=strtok(NULL,sep)printf("%s\n", ret);return 0;
}

运行结果:


 strstr()使用以及模拟实现

      函数参数及其返回类型:

char* strstr(const char* str1, const char* str2 );
//返回值是在str1中第一次出现str2字符串的首地址,如果没找到返回NULL

作用:

在str1中找str2字符串首次出现的位置

使用举例:

 模拟实现:

#include<assert.h>
char* my_strstr(const char* str1, const char* str2) {assert(str1 && str2);const char* s1 = NULL;const char* s2 = NULL;const char* cur = str1;//cur直接指向str1while (*cur) {s1 = cur;//s1指向curs2 = str2;//s2变量用来指向str2while (*s1 && *s2 && *s1 == *s2) {//当s1和s2不为\0时继续找:*s1 && *s2 //满足条件找下一对字符:*s1 == *s2s1++;s2++;}if (!*s2) {//取反操作判断是否为\0,为\0说明s2对应到最后一个字符,跳出循环了return cur;}cur++;//cur自增,当一次不满足时,使指向cur的s1跳到下一个字符继续匹配}return NULL;//指向str1的cur自增到str1的最后一个字符,还没匹配成功,说明找不到了,返回NULL
}
//strstr()函数模拟实现
int main() {char str2[100] = "ABC";char str1[100] = "HJKANUABCENNS";char* str;str = my_strstr(str1, str2);printf("%s", str);return 0;
}

运行结果:


 strerror()

       函数参数及其返回类型:

char* strerror(int errornum);
//返回值是整型数字errornum对应的错误码信息首地址

作用:

strerror()函数可以把参数部分对应的错误码返回

注意点:

简单来说,在C语言编译器上规定了一些错误码(如栈溢出:strack overflew),一般存放在error.h头文件中,当C语言程序启动时,会使用全局变量errno来记录当前错误码的地址。

errno是一个全局变量用来存放错误码。

使用举例:

#include<string.h>
int main() {int i;for (i = 0; i < 10; i++) {printf("%s\n", strerror(i));//打印前10条错误码,其中错误码0为无错}return 0;
}

运行结果:

 值得注意的是使用perror()函数可以直接将当前错误码打印出来(括号内为提示信息,可不传参)

 

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

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

相关文章

揭秘网络编程:同步与异步IO模型的实战演练

摘要 ​ 在网络编程领域&#xff0c;同步(Synchronous)、异步(Asynchronous)、阻塞(Blocking)与非阻塞(Non-blocking)IO模型是核心概念。尽管这些概念在多篇文章中被广泛讨论&#xff0c;它们的抽象性使得彻底理解并非易事。本文旨在通过具体的实验案例&#xff0c;将这些抽象…

在React中使用Sass实现Css样式管理-10

0. 什么是Sass Sass(Syntactically Awesome Stylesheets)是一个 CSS 预处理器&#xff0c;是 CSS 扩展语言&#xff0c;可以帮助我们减少 CSS 重复的代码&#xff0c;节省开发时间&#xff1a; Sass 引入合理的样式复用机制&#xff0c;可以节约很多时间来重复。支持变量和函…

C++之“流”-第2课-C++和C标准输入输出同步

为什么C和C的标准输入输出不同步时&#xff0c;数据会混乱&#xff1f;同步会带来多大性能损失&#xff1f;为什么说这个损失通常不用太在乎&#xff1f; 0. 课堂视频 C之“流”-第2课&#xff1a;和C输入输出的同步 1. 理解cin和cout的类型与创建过程 std::cout 是std::ostre…

添加、修改和删除字典元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 由于字典是可变序列&#xff0c;所以可以随时在字典中添加“键-值对”。向字典中添加元素的语法格式如下&#xff1a; dictionary[key] value 参数…

You don‘t have enough free space或者no space left on device异常

1.磁盘空间不足 Linux安装软件显示 You dont have enough free space 或者docker拉镜像时&#xff0c;出现磁盘空间不足的情况 no space left on device 如果你是ubuntu系统。查看磁盘空间 df -h 多半是这个目录满了/dev/mapper/ubuntu--vg-ubuntu--lv 大多情况我们只希望扩…

学习编程对英语要求高吗?

学习编程并不一定需要高深的英语水平。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 虽然一些编程资源和文档可能…

typora自动生成标题序号(修改V1.0)

目录 带序号效果图 解决方法 带序号效果图 解决方法 1.进入文件夹&#xff1a;文件–>偏好设置–>外观–>主题–>打开主题文件夹 2.如果没有base.user.css文件&#xff0c;新建一个。如果有直接用记事本打开&#xff0c;把下面代码拷贝进去保存。 /** initiali…

【JUC编程】-多线程和CompletableFuture的使用

多线程编程 文章目录 多线程编程[toc]引言创建多线程的方式继承Thread类实现Runnable接口实现Callable接口Callable和Runnable的区别 Lambda表达式 线程的实现原理Future&FutureTask具体使用submit方法Future到FutureTask类Future注意事项局限性 CompletionService引言使用…

第八大奇迹

目录 题目描述 输入描述 输出描述 输入输出样例 示例 输入 输出 运行限制 原题链接 代码思路 题目描述 在一条 R 河流域&#xff0c;繁衍着一个古老的名族 Z。他们世代沿河而居&#xff0c;也在河边发展出了璀璨的文明。 Z 族在 R 河沿岸修建了很多建筑&#xff0c…

Ps 滤镜:消失点

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V 两条平行的铁轨或两排树木连线相交于很远很远的某一点&#xff0c;这点在透视图中叫做“消失点”&#xff0c;也称为“灭点”。 消失点 Vanishing Point滤镜主要用于在图像中处理具有透视…

C++入门3——类与对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。可是空类中真的什么都没有吗&#xff1f; 其实并不是的&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xf…

libmodbus开发库介绍

目录 功能概要源码获取源码内容结构源码与移植 功能概要 libmodbus是一个免费的跨平台支持RTU和TCP的Modbus库&#xff0c;遵循LGPL V2.1协议。libmodbus支持Linux、Mac Os X、FreeBSD、QNX和Windows等操作系统。libmodbus可以向符合Modbus协议的设备发送和接收数据&#xff0…

《Python侦探手册:用正则表达式破译文本密码》

在这个信息爆炸的时代&#xff0c;每个人都需要一本侦探手册。阿佑今天将带你深入Python的正则表达式世界&#xff0c;教你如何像侦探一样&#xff0c;用代码破解文本中的每一个谜题。从基础的字符匹配到复杂的数据清洗&#xff0c;每一个技巧都足以让你在文本处理的领域中成为…

系统思考—战略沙盘推演咨询服务

今日与JSTO团队一起学习了《战略沙盘推演咨询服务》。通过沙盘体验&#xff0c;我深刻感受到组织与战略就像一张皮的正反两面。在转型过程中&#xff0c;即使战略非常明确&#xff0c;团队成员由于恐惧和顾虑&#xff0c;往往不愿意挑战新的业务&#xff0c;从而难以实现战略目…

VasDolly图形工具-Android多渠道打包福利

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;旨在更好的帮助开发者构建多渠道包 使用 下载并解压工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;本地需安装java环境&#xff09; 渠道格式说明 txt文件&#xff…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十一)- 微服务(1)

微服务 1.认识微服务 SpringCloud底层是依赖于SpringBoot的&#xff0c;并且有版本的兼容关系&#xff0c;如下&#xff1a; 2. 服务拆分 需求 &#xff1a; 把订单信息和用户信息一起返回 从订单模块向用户模块发起远程调用 &#xff0c; 把查到的结果一起返回 步骤 &…

多态(难的起飞)

注意 virtual关键字&#xff1a; 1、可以修饰原函数&#xff0c;为了完成虚函数的重写&#xff0c;满足多态的条件之一 2、可以菱形继承中&#xff0c;去完成虚继承&#xff0c;解决数据冗余和二义性 两个地方使用了同一个关键字&#xff0c;但是它们互相一点关系都没有 虚函…

JAVASE总结一

1、 2、引用也可以是成员变量&#xff08;实例变量&#xff09;&#xff0c;也可以是局部变量&#xff1b;引用数据类型&#xff0c;引用&#xff0c; 我们是通过引用去访问JVM堆内存当中的java对象&#xff0c;引用保存了java对象的内存地址&#xff0c;指向了JVM堆内存当中…

AURIX TC3xx单片机介绍-启动过程介绍1

从各个域控制器硬件解决方案来看,MPU可能来自多个供应商,有瑞萨,有NXP等,但对于MCU来说,基本都采用英飞凌TC3xx。 今天我们就来看一下TC3xx的启动过程,主要包含如下内容: uC上电过程中,会经过一个上电时序,从复位状态“脱离”出来;Boot Firmware是复位后第一个执行的…