最近在写一段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()函数使用注意事项相关推荐

  1. C语言 strstr函数的用法及模拟实现strstr函数

    C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...

  2. C语言strstr函数

    strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. C语言函数 包含文件:string.h ...

  3. C语言strstr()函数(在主字符串里查找子字符串,返回第一次找到的子字符串以及后面的字符串)

    需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例 描述 C 库函数 char *strstr(const char *haystack, con ...

  4. C语言strstr函数实现

    自己实现C语言中的strstr函数,采用字符一个一个进行匹配,如果不等,则从下一个位置进行匹配. /* strstr 实现 */ char* mystrstr(const char* dest, co ...

  5. C语言strstr()函数用法-字符串查找

    1.函数定义 strstr()函数是一个参数为两个字符指针类型,返回值是char*类型的函数. 用于找到子串(str2)在一个字符串(str1)中第一次出现的位置(不包括str2的串结束符),并返回该 ...

  6. C语言 strstr()函数介绍

    前言 C语言中,strstr()函数用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中. 例如:char *strstr(const char *str1, const char ...

  7. C语言使用函数必须知道的3点注意事项!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  8. C语言 | scanf函数

    C语言使用scanf输入一个数 #include<stdio.h>//头文件 int main()//主函数 程序的入口 {int num;printf("请输入一个数:&quo ...

  9. strstr函数实现(C语言)

    strstr函数实现(C语言) second60  20180601 strstr 用来字符串查找子串. 顺便说一下, 字符串操作函数是C语言中非常重要的函数,里面包括了指针的精华,同时对学习数据结构 ...

最新文章

  1. Exchange 数据库邮箱的修复
  2. Linux网络环境配置
  3. Tomcat 是怎么处理js file access request的
  4. DCL并非单例模式专用
  5. [Ubuntu] Simple way to pass passwords on a shell script
  6. AVR系列之TWI功能测试
  7. 关于域名注册、投资问题的相关解释
  8. kubernetes视频教程笔记 (27)-集群调度-污点和容忍
  9. 顶级程序员收藏的数学书
  10. 每日一题--字符串数组重排(Google推荐面试书--Cracking the Coding Interview)
  11. MongoDB 高阶
  12. html+css唯美登录页面,代码提供(效果展示)
  13. Win7下使用建行捷德U盾支付
  14. GoLang 抽奖系统 设计
  15. sigmoid函数温习【函数曲线可视化与导函数曲线可视化】
  16. 电磁攻击方法与能量攻击方法的对比
  17. Golang Append()详解
  18. selenium常用的浏览器窗口操作
  19. Codeforces A. Bear and Big Brother
  20. 国科大学习资料--最优化计算方法(王晓)--期末考试试卷2

热门文章

  1. 创新的功劳不属于某一个人---读《创新者》有感
  2. mybatis plus 格式话_(转)mybatis-plus的使用 ------ 进阶
  3. HTML一键打包APK工具_安卓app封装_H5打包安卓APP
  4. git撤销的相关操作
  5. 全球最大开源软件开发平台和仓库
  6. 2013.12.26 泡面吧--判断一个数是否为质数
  7. WIN10下共享文件,无密码访问,共享打印机,与XP共享文件。
  8. 《微积分:一元函数微分学》——罗尔定理
  9. 大型交易系统之高并发
  10. 【Pytorch-从一团乱麻到入门】:6、Pytorch 选择最终模型的方式:save best model early stop