栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言-str家族之strchr,strrchr,strchrnul

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言-str家族之strchr,strrchr,strchrnul

文章目录
  • 一、strchr
    • 1.声明
    • 2.作用
    • 3.源码
    • 4.说明
    • 5.示例
  • 二、strrchr
    • 1.声明
    • 2.作用
    • 3.源码
    • 4.说明
    • 5.示例
  • 三.strchrnul
    • 1.声明
    • 2.作用
    • 3.源码
    • 4.说明
    • 5.示例

一、strchr 1.声明
char *strchr(const char *s, int c);
2.作用

在s指向的字符中查找第一次出现的字符c,并返回该字符的位置

3.源码
char *strchr(const char *s, int c)
{
	for (; *s != (char)c; ++s)
		if (*s == '')
			return NULL;
	return (char *)s;
}
4.说明

执行*s != (char)c,判断当前指针指向的的值是否和c相等,并判断*s == '',如果相等说明在s指向的字符中没有c,返回NULL,否则返回第一次出现字符c的指针的位置

5.示例
#include
#include
void main()
{
	char arr[] = "ABCDEFGD";
	char ser = 'D', ser1 = 'k';
	char *ret,*ret1;

	ret = strchr(arr,ser);
	ret1 = strchr(arr,ser1);

	printf("找到后返回的值:%sn",ret);
	printf("找不到返回的值:%sn",ret1);
	
}

看到木有,返回的指针指向了第一个’D’的位置及其之后的空间

找到后返回的值:DEFGD
找不到返回的值:(null)
二、strrchr 1.声明
char *strrchr(const char *s, int c);
2.作用

strrchr和strchr作用一样,只不过strrchr相当于从后向前找第一个出现c的位置(而代码则是从前向后找,找到最后一个)

3.源码
char *strrchr(const char *s, int c)
{
	const char *last = NULL;
	do {
		if (*s == (char)c)
			last = s;
	} while (*s++);
	return (char *)last;
}
4.说明

参考strchr的说明

5.示例

直接在strchr的例子中把ret = strchr(arr,ser);改为ret = strrchr(arr,ser);

找到后返回的值:D
找不到返回的值:(null)
三.strchrnul 1.声明
char *strchrnul(const char *s, int c);
2.作用

和strchr的区别是:当在s中找不到c时,strchr返回NULL,而strchrnul返回一个null, the null byte at the end of s 应该就是s的结束符’’

3.源码
char *strchrnul(const char *s, int c)
{
	while (*s && *s != (char)c)
		s++;
	return (char *)s;
}
4.说明

*s && *s != (char)c这一步保证*s字符不为’’,且判断*s和c是否相等,两者必须同时为真。当*s为空或者*s和c相等了,不在循环,并返回*s

5.示例

#define _GNU_SOURCE 要加在首行
VC++6.0运行不了,放到虚拟机中实验

#define _GNU_SOURCE

#include
#include
void main()
{
	char arr[] = "ABCDEFGD";
	char ser = 'D', ser1 = 'k';
	char *ret,*ret1;

	ret = strchrnul(arr,ser);
	ret1 = strchrnul(arr,ser1);

	printf("找到后返回的值:%sn",ret);
	printf("找不到返回的值:%sn",ret1);
	
}

从结果可以看到,strchrnul也是从前向后找的

找到后返回的值:DEFGD
找不到返回的值:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号