C语言strstr()函数使用注意事项
最近在写一段C语言代码时用到了strstr()函数,遇到了一个意想不到的问题,记录一下。
这个函数接收两个参数,strstr(str1,str2)函数具体功能是检测str2是否为str1的子集,如果是则返回str1首次出现的地址,否则返回NULL。
一开始调用这个函数的时候没想太多,直接使用后发现有些情况下尽管str2是str1的子集,函数返回值也是NULL。经过排查后发现如果在传入参数str1的数组中包含str2,但是在str2出现前有值为0x00 或 ‘\0’的数组元素,函数就会返回NULL。根据这一现象,盲猜这是此函数的执行结束机制,即当函数检测到str1中出现0x00或’\0’时,立即return。
下面用程序验证一下:
int main()
{char str1[6]={'a','b','c','d','e'}; char str2[]="cd";char *n; n=strstr(str1,str2); //将函数返回值赋值给nprintf("&str1:%d\n",str1); //打印str1数组首地址printf("&str2:%d\n",str2);printf(" n:%d\n",n); //打印n的值system("pause");return 0;
}
执行结果:
可以看出n的值为6356744,比str1首地址大2,也就是str2首次出现的地址。
这个时候将str1[0]改为0x00或’\0’,运行结果如下:
这个时候n的值为0,说明strstr()函数执行到str1[0]时就return 0。
原文链接: https://www.jhxblog.cn/article/?articleid=3
C语言strstr()函数使用注意事项相关推荐
- C语言 strstr函数的用法及模拟实现strstr函数
C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...
- C语言strstr函数
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. C语言函数 包含文件:string.h ...
- C语言strstr()函数(在主字符串里查找子字符串,返回第一次找到的子字符串以及后面的字符串)
需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例 描述 C 库函数 char *strstr(const char *haystack, con ...
- C语言strstr函数实现
自己实现C语言中的strstr函数,采用字符一个一个进行匹配,如果不等,则从下一个位置进行匹配. /* strstr 实现 */ char* mystrstr(const char* dest, co ...
- C语言strstr()函数用法-字符串查找
1.函数定义 strstr()函数是一个参数为两个字符指针类型,返回值是char*类型的函数. 用于找到子串(str2)在一个字符串(str1)中第一次出现的位置(不包括str2的串结束符),并返回该 ...
- C语言 strstr()函数介绍
前言 C语言中,strstr()函数用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中. 例如:char *strstr(const char *str1, const char ...
- C语言使用函数必须知道的3点注意事项!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言 | scanf函数
C语言使用scanf输入一个数 #include<stdio.h>//头文件 int main()//主函数 程序的入口 {int num;printf("请输入一个数:&quo ...
- strstr函数实现(C语言)
strstr函数实现(C语言) second60 20180601 strstr 用来字符串查找子串. 顺便说一下, 字符串操作函数是C语言中非常重要的函数,里面包括了指针的精华,同时对学习数据结构 ...
最新文章
- Exchange 数据库邮箱的修复
- Linux网络环境配置
- Tomcat 是怎么处理js file access request的
- DCL并非单例模式专用
- [Ubuntu] Simple way to pass passwords on a shell script
- AVR系列之TWI功能测试
- 关于域名注册、投资问题的相关解释
- kubernetes视频教程笔记 (27)-集群调度-污点和容忍
- 顶级程序员收藏的数学书
- 每日一题--字符串数组重排(Google推荐面试书--Cracking the Coding Interview)
- MongoDB 高阶
- html+css唯美登录页面,代码提供(效果展示)
- Win7下使用建行捷德U盾支付
- GoLang 抽奖系统 设计
- sigmoid函数温习【函数曲线可视化与导函数曲线可视化】
- 电磁攻击方法与能量攻击方法的对比
- Golang Append()详解
- selenium常用的浏览器窗口操作
- Codeforces A. Bear and Big Brother
- 国科大学习资料--最优化计算方法(王晓)--期末考试试卷2
热门文章
- 创新的功劳不属于某一个人---读《创新者》有感
- mybatis plus 格式话_(转)mybatis-plus的使用 ------ 进阶
- HTML一键打包APK工具_安卓app封装_H5打包安卓APP
- git撤销的相关操作
- 全球最大开源软件开发平台和仓库
- 2013.12.26 泡面吧--判断一个数是否为质数
- WIN10下共享文件,无密码访问,共享打印机,与XP共享文件。
- 《微积分:一元函数微分学》——罗尔定理
- 大型交易系统之高并发
- 【Pytorch-从一团乱麻到入门】:6、Pytorch 选择最终模型的方式:save best model early stop