• 实现memstr请指正


    /*
     * author:maolingzhi
     * date:2012-04-05
     * 这个程序是用来测试memstr用以模板strstr功能
     * mem*系列有memchr但是没有memstr,本程序用来实现该功能
     * SYNOPSIS
     * #include <string.h>
     * void *memstr(const void *s, const char *str, size_t n);
     * DESCRIPTION
     *        The  memstr()  function  scans  the first n bytes of the memory area pointed to by s for the string str.  The x byte to match str (interpreted as an unsigned
     *               character) stops the operation.
     * RETURN VALUE
     *       The memstr() functions return a pointer to the matching byte or NULL if the character does not occur in the given memory area.
     */

    #include <stdio.h>
    #if dev
    #include <assert.h>
    #endif
    #include <string.h>
    char *memstr(const char *s , const char *str , size_t n)
    {
        if(NULL == s)
        {
            fprintf(stderr,"输入参数s为NULL!");
            return NULL;
        }

        if(NULL == str)
        {
            fprintf(stderr,"输入参数str为NULL!");
            return NULL;
        }

        if(n <= 0)
        {
            fprintf(stderr,"输入参数n为非正数!");
            return NULL;
        }

        if(strlen(str) == 0)
        {
            fprintf(stderr,"输入参数str为空!");
            return NULL;
        }

        char *_s = (char*)s;
        int _n = n;
        char *r = NULL;
       
        while(_n > 0 && ((r =(char*) memchr(_s,*str,_n)) != NULL) )
        {
            int distance = r - _s;
            if((distance  + strlen(str) <= _n) && (memcmp(r,str,strlen(str)) == 0))
            {
                return r;
            }
            else
            {
                _s = r+1;
                _n -= distance + 1;
            }
        }
        return NULL;

       }

    #if dev
    int main(void)
    {
        {
        char a[] = "welc\r\nome";
        char str[] = "\r\n";
        char *p = memstr(a,str,strlen(a));
        assert(p == a+4);
        }

        {
        char a[] = "welcome\r\n";
        char str[] = "\r\n";
        char *p = memstr(a,str,strlen(a));
        assert(p == a+7);
        }

        {
        char a[] = "welcome\r";
        char str[] = "\r\n";
        char *p = memstr(a,str,strlen(a));
        assert(p == NULL);
        }


        {
        char a[] = "abab";
        char str[] = "b";
        char *p = memstr(a,str,strlen(a));
        assert(p == a+1);
        }


        return 0;
    }
    #endif

  • 相关阅读:
    grep在一个特定的文件搜索文件夹keyword
    Mysql HA
    通过wmi获取本地硬件信息的一些疑问。
    nginx+tomcat 架构 HttpServletRequest.getScheme()获取正确的协议
    mybatis配置log4j控制台打印SQL语句
    mybatis使用${}拼接sql出错??
    【MySQL】JDBC连接MySQL的一些问题以及解决办法
    mybatis 嵌套查询子查询column传多个参数描述
    关于一些对location认识的误区
    Nginx+lua学习
  • 原文地址:https://www.cnblogs.com/lexus/p/3001173.html
Copyright © 2020-2023  润新知