是否存在支持传入搜索边界的strchr类C语言字符串查找函数?
解决方案
C标准库<string.h>中已经提供了完全匹配你需求的函数:memchr。
函数原型
void *memchr(const void *ptr, int ch, size_t count)
参数说明
ptr:搜索的起始内存地址,直接传入你持有的char* pos即可ch:需要查找的目标ASCII字符,和strchr的入参规则一致,传入的int值最终会被转换为unsigned char做比较count:搜索的最大字节数,直接传入你持有的子串长度即可
核心特性
该函数只会在你指定的count字节范围内搜索目标字符,不会因为中途遇到\0终止搜索,也不会超出长度范围向后查找,完美适配你不需要处理子串后半部分的需求。
使用示例
#include <string.h> char* pos = /* 你的子串起始指针 */; size_t sub_len = /* 你的子串长度 */; // 在sub_len长度范围内查找字符'a' char* result = memchr(pos, 'a', sub_len); if (result != NULL) { // 找到目标字符,result指向范围内第一个匹配的地址 } else { // 指定范围内没有找到目标字符 }
补充说明
如果你需要从子串末尾向前倒序查找目标字符,可以使用POSIX标准扩展的memrchr函数,参数规则和memchr完全一致,但注意该函数不属于C标准,跨Windows等非POSIX平台使用时需要自行实现。
内容的提问来源于stack exchange,提问作者a_girl
相关产品推荐
相关产品推荐

