作者:夏欣晴 | 来源:互联网 | 2023-06-10 16:40
Zendzend_operators.h:staticinlinechar*zend_memnstr(char*haystack,char*needle,intneedle_len
Zend/zend_operators.h:
static inline char * zend_memnstr(char *haystack, char *needle, int needle_len, char *end)
{
//字符首指针
char *p = haystack;
//最后一个字符
char ne = needle[needle_len-1];
//减小查询范围,判断needle_len应该小于end还算比较巧妙哦
end -= needle_len;
while (p <= end) {
//在数组的前n个字节中搜索字符 memchr(p, *needle, (end-p+1))
if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {
//如果找到首字节并且最后一个字节相同
if (!memcmp(needle, p, needle_len-1)) {
//对比找到啦那么返回首指针
return p;
}
}
if (p == NULL) {
return NULL;
}
p++;
}
return NULL;
}
php函数strpos、explode都用到了此函数,具体代码可以查看:ext/standard/string.c
版权声明:本文为博主原创文章,未经博主允许不得转载。
php字符串查找函数zend_memnstr