火星科技网您的位置:首页 >科普解惑 > 知识分享 >

strchr 函数用法 C 语言字符串查找详解

导读 strchr 是 C 语言标准库 string h 里面的字符查找函数,作用是在一个字符串里面,从起始位置向后查找指定字符第一次出现的位置,找到

strchr 是 C 语言标准库 string.h 里面的字符查找函数,作用是在一个字符串里面,从起始位置向后查找指定字符第一次出现的位置,找到之后返回该字符对应的指针,如果整个字符串遍历完都没有找到目标字符,就返回空指针 NULL,这个函数是 C 语言入门高频函数,很多初学者容易混淆 strchr 和 strrchr,strchr 是从左往右找第一次出现,strrchr 是从右往左找最后一次出现,使用 strchr 之前必须引入头文件 string.h,传入的第一个参数是待查找字符串首地址,第二个参数是要查找的字符,注意第二个参数类型虽然写 char,但是实际会被转成 int 类型,查找的时候会包含字符串末尾的结束符 \0,这个细节很多人不知道,写代码的时候经常踩坑,这个函数经常用来解析路径分割符,拆分字符串,提取指定字符之后的子串,掌握它的返回值和边界判断,就可以稳定完成字符定位相关编程任务。

函数基础信息对照表

项目说明
头文件string.h
函数原型char strchr(const char str, int c)
返回值找到返回字符指针,未找到返回 NULL
查找方向从字符串开头向后查找,匹配第一次出现
是否识别 \0会匹配字符串末尾结束符

参数与返回值深度讲解

第一个参数 str,是 const char 类型指针,指向待检索的字符串,加上 const 代表函数内部不会修改原字符串内容,原字符串必须是以 \0 结尾的合法 C 字符串,如果传入没有结束符的非法缓冲区,strchr 会越界查找,造成内存访问错误。

第二个参数 c,类型是 int,传入的时候可以直接写字符常量比如 a,底层会自动转成对应的 ASCII 码,查找是严格区分大小写的,大写 A 和小写 a 属于两个不同字符,strchr 不会自动忽略大小写。

返回值是 char 指针,指向匹配成功的那个字符本身,不是该字符前面的位置,拿到这个指针之后,可以继续读取后面的子串,如果返回 NULL,代表查找失败,代码里面必须做 NULL 判断,不判断直接解引用会触发空指针崩溃。

基础调用步骤

第一步 代码顶部引入头文件 include string.h

第二步 定义源字符串,保证字符串末尾自带 \0 结束符

第三步 调用 strchr,传入字符串首地址和目标字符,接收返回的指针变量

第四步 判断返回指针是否等于 NULL,如果不为空,代表查找成功,可以使用该指针,如果等于 NULL,执行查找失败分支处理

第五步 业务处理,比如打印匹配位置,或者提取后面子串

代码示例

include

include

int main()

{

char buf[] = "hello world";

char p = strchr(buf, 'w');

if(p != NULL)

{

printf("找到字符,位置之后内容是 %s\n", p);

}

else

{

printf("没有找到该字符\n");

}

return 0;

}

运行之后会输出 w 后面的 world,因为返回指针直接指向 w,打印的时候从 w 开始输出直到 \0。

重点易错点

第一 严格区分大小写,strchr 查找 w 和 W 结果不一样,想要不区分大小写需要自己循环遍历或者转换大小写之后再调用

第二 查找目标是 \0 的时候,strchr 会返回字符串末尾结束符的地址,这个是特殊场景,很多人以为找不到

第三 strchr 不会修改原字符串,因为参数是 const,不要试图通过返回指针修改常量字符串,常量字符串放在只读内存,修改会程序崩溃

第四 和 strstr 区分,strstr 是查找子串,strchr 只查找单个字符,不要把两个函数用途搞混

拓展对比 strchr strrchr

strchr 从左向右查找字符第一次出现

strrchr 从右向左查找字符最后一次出现

两个函数原型几乎一致,只是查找方向不一样,业务需要拿到最后一个分割符的时候,就改用 strrchr

【常见问题】

问题 1 strchr 函数用法里面查找字符区分大小写吗

回答 1 strchr 函数用法里面查找是严格区分大小写,大写和小写字符识别成不同目标,使用 strchr 函数用法的时候,如果需要忽略大小写,要自行转换字符再调用 strchr。

问题 2 strchr 函数用法查找失败返回什么

回答 2 strchr 函数用法查找失败的时候返回空指针 NULL,写代码使用 strchr 函数用法必须增加 NULL 判断,不然直接解引用返回指针会出现空指针异常。

问题 3 strchr 函数用法可以查找子串吗

回答 3 strchr 函数用法只能查找单个字符,不能查找连续子串,如果需要查找子串,要使用 strstr,不要混淆 strchr 函数用法和 strstr 的功能。

问题 4 strchr 函数用法必须引入哪个头文件

回答 4 strchr 函数用法必须引入 string.h 头文件,缺少头文件的时候,编译器会出现隐式声明警告,调用 strchr 函数用法会出现异常。

【免责申明】

本文为 C 语言 strchr 函数用法编程科普,不同编译器版本行为基本一致,代码仅作学习演示,正式项目请做好内存安全校验,不要传入非法无结束符缓冲区。