windows下使用memem函数的实现

来源:互联网 发布:nginx过滤url ip限制 编辑:程序博客网 时间:2024/05/20 18:42


一、FreeBDS

#include <string.h> /* * Find the first occurrence of the byte string s in byte string l. */ void *memmem(const void *l, size_t l_len, const void *s, size_t s_len){    register char *cur, *last;    const char *cl = (const char *)l;    const char *cs = (const char *)s;     /* we need something to compare */    if (l_len == 0 || s_len == 0)        return NULL;     /* "s" must be smaller or equal to "l" */    if (l_len < s_len)        return NULL;     /* special case where s_len == 1 */    if (s_len == 1)        return memchr(l, (int)*cs, l_len);     /* the last position where its possible to find "s" in "l" */    last = (char *)cl + l_len - s_len;     for (cur = (char *)cl; cur <= last; cur++)        if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0)            return cur;     return NULL;}


二、其他实现

void *memmem(const void *start, unsigned int s_len, const void *find, unsigned int f_len){char          *p = (char *)start;char  *q = (char *)find;;unsigned int  len= 0;if (s_len == 0 || f_len == 0)return NULL;if (s_len < f_len)return NULL;while((p - (char *)start + f_len) <= s_len){while(*p++ == *q++){len++;if(len == f_len)return(p - f_len);};q = (char *)find;len = 0;};return NULL;}


0 0
原创粉丝点击