windows下使用memem函数的实现


一、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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值