【C语言】字符串函数下

 👑个人主页:啊Q闻       

🎇收录专栏:《C语言》           

 🎉道阻且长,行则将至

 前言

这篇博客是字符串函数下篇,主要是关于长度受限制的字符串函数(strncpy,strncat,strncmp)的使用和模拟实现,还有一些字符串函数的相关知识。

一.strncpy 

1.使用

注1:拷贝num个字符从源字符串到目标空间

注2:如果源字符串的长度小于num,则拷贝完源字符串之后,在后面追加'\0',直至到num个。 

运行结果:

  

注2解释:

 

2.模拟实现 

char* my_strncpy(char* dest, const char* src, size_t num)
{char* ret = dest;assert(dest);assert(src);int i = 0;while (i < num)//打印拷贝字符,以拷贝字符数作为限制条件{*dest = *src;dest++;src++;i++;}*dest = '\0';return ret;
}

二.strncat 

1.使用

 

注1:将source指向的字符串的前num个字符追加到destination指向的字符串末尾,再追加一个'\0'。

注2:如果sorce指向的字符串长度小于num时,只会将字符串中至'\0'前的内容追加到destination指向的字符串末尾

运行结果:

 

调试结果证明注1:

 

当num大于sorce字符串长度的时候,运行结果如下:

 

调试结果可证明注2:

 

2.模拟实现 

char* my_strncat(char* dest, const char* src, size_t num)
{char* ret = dest;assert(dest);assert(src);int i = 0;while (*dest){dest++;}while (i < num){*dest = *src;dest++;src++;i++;}*dest = '\0';return ret;
}

三.strncmp 

1.使用

 

注1:该函数用于比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样就提前结束 

运行结果:

 

2.模拟实现 

int  my_strncmp(char* str1, const char* str2, size_t num)
{int i = 0;assert(str1);assert(str2);for (i = 0; i < num; i++)//循环限制条件为小于比较字符个数{if (*str1 == *str2)//如果比较相等就往后移{str1++;str2++;}else{return *str1 - *str2;//不相等就比较大小}}return 0;//当跳出循环时,证明两个字符串比较部分完全相等
}int main()
{char s1[20] ="hello";char s2[] = "aello";int ret=my_strncmp(s1, s2, 3);printf("%d\n", ret);return 0;
}

也可以:

int my_strncmp(char* str1, const char* str2, size_t num)
{int ret = 0;assert(str1);assert(str2);while (num--){ret = *str1 - *str2;if (ret != 0)//不等于0就跳出,返回一个非0的数break;str1++;str2++;}return ret;//跳出整个循环时证明两个字符串比较部分相等
}

四.strstr 

1.使用

  

注1:函数返回字符串str2在字符串str1第一次出现的位置

注2:字符串的比较匹配不包含\0字符,以\0结尾 

运行结果:

 

2.模拟实现 

char* my_strstr(const char* str1, const char* str2)
{const char* cur = str1;const char* s1 = NULL;const char* s2 = NULL;assert(str1 && str2);if (*str2 == '\0'){return (char*)str1;}while (*cur){s1 = cur;s2 = str2;while (*s1 == *s2 && *s1 && *s2){s1++;s2++;}if (*s2 == '\0'){return (char*)cur;}cur++;}return NULL;

详解:

 谢谢你的阅读,如果对你有帮助的,三连么么么

 

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

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

相关文章

【教程】APP加固的那些小事情

摘要 APP加固是保护APP代码逻辑的重要手段&#xff0c;通过隐藏、混淆、加密等操作提高软件的逆向成本&#xff0c;降低被破解的几率&#xff0c;保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法&#xff0c;以及处理安装出现问题的情况和资源文件加固策略选择…

Elasticsearch:调整搜索速度

在我之前的文章 “Elasticsearch&#xff1a;如何提高查询性能” 及 “Elasticsearch&#xff1a;提升 Elasticsearch 性能” 里&#xff0c;我详细描述了如何提高搜索的性能。在今天的文章里&#xff0c;我从另外一个视角来描述如何调整搜索的速度。希望对大家有所帮助&#x…

Java设计模式:桥接模式

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

R语言系列4——R语言统计分析基础

目录 写在开头1. 描述性统计分析1.1 描述性统计分析的定义与重要性1.2 R语言中的描述性统计分析功能1.3 常用的描述性统计量及其在R中的计算方法1.4 使用R语言进行描述性统计分析的实际示例1.5 描述性统计分析的局限性和应用注意事项 2. 假设检验基础2.1. 假设检验的基本原理和…

力扣hot100题解(python版69-73题)

69、有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…

浅易理解:YOLOv1

You Only Look Once: Unified, Real-Time Object Detection &#xff08;读原英文版YOLOv1 &#xff0c;让我更深刻理解YOLO内容&#xff0c;保留部分原英文译文&#xff09; Abstract 2015年YOLO团队提出了一种名为YOLO的新目标检测方法。以往的目标检测工作大多将分类器转用…

leetcode刷题(javaScript)——堆相关场景题总结

堆是什么&#xff1f;堆都能用树表示&#xff0c;并且一般树的实现都是利用链表。平时使用的最多的是二叉堆&#xff0c;它可以用完全二叉树表示&#xff0c;二叉堆易于存储&#xff0c;并且便于索引。在堆的实现时注意&#xff1a;因为是数组&#xff0c;所以父子节点的关系就…

气膜建筑是由什么材料制成的?PVDF膜材的革新应用值得期待吗?

随着科技的不断进步和发展&#xff0c;建筑行业也在不断涌现新型的建筑材料。气膜建筑作为其中一种创新的建筑膜材&#xff0c;在体育馆、运动场馆、展览厅等场所得到了广泛的应用。那么&#xff0c;究竟是什么材料构成了气膜建筑呢&#xff1f;轻空间小编将为您详细介绍。 气膜…

Python数值方法在工程和科学问题解决中的应用

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 随着计算机技术的不断发展&#xff0c;Python作…

《行业指标体系白皮书》重磅发布,剖析指标建设困境,构建前瞻性的指标体系(附下载)

正处于企业指标建设过程中的你&#xff0c;是否经常遇到这样的问题&#xff1a; • 各个部门独立建设信息系统&#xff0c;由此产生的指标定义和计算方式各异&#xff0c;导致管理层无法快速准确地掌握整体业务运行状况 • 缺乏对指标的统一管理和规范&#xff0c;产生重复的指…

OPCUA 学习笔记:程序模型

无论是边缘控制器&#xff0c;还是PLC 中&#xff0c;除了信息模型之外&#xff0c;还有应用程序&#xff0c;这些程序可能是IEC61131-3 编写的程序&#xff0c;也可能是其它程序开发的可执行程序。 尽管OPCUA 描述模型能力很强&#xff0c;但是它缺乏算法的描述方式。但是OPCU…

欧盟地区 iOS DMA 更新后,Brave浏览器安装量激增

自《欧洲数字市场法案》发布后&#xff0c;苹果公司为遵守该法案&#xff0c;在 iOS 17.4 中引入了一项新功能&#xff0c;要求欧盟用户从包括 Brave 在内的列表中选择一个默认网络浏览器。 用户在安装更新后首次打开 Safari 时&#xff0c;会弹出一则消息提示用户从本国流行的…