- 一、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 找不到返回的值:



