读书人

求高手查看这个函数的功能。解决方法

发布时间: 2012-06-13 12:30:18 作者: rapoo

求高手查看这个函数的功能。

C/C++ code
void *mymemmem(const void *buf, size_t buf_len, const void *byte_line, size_t byte_line_len){        unsigned char *bl = (unsigned char *)byte_line;        unsigned char *bf = (unsigned char *)buf;        unsigned char *p  = bf;        while (byte_line_len <= (buf_len - (p - bf))){/*这句什么意思*/                unsigned int b = *bl & 0xff;                /*memchr(const void *buf, int ch, size_t count):从buf所指内存区域的前count个字节查找字符ch*/                if ((p = (unsigned char *) memchr(p, b, buf_len - (p - bf))) != NULL){/*什么意思*/                        if ( (memcmp(p, byte_line, byte_line_len)) == 0)/*比较内存区域buf1和buf2的前count个字节。*/                                return p;                        else                                p++;                }else{                        break;                }        }        return NULL;}


[解决办法]
C/C++ code
void *mymemmem(const void *buf, size_t buf_len, const void *byte_line, size_t byte_line_len){        unsigned char *bl = (unsigned char *)byte_line;        unsigned char *bf = (unsigned char *)buf;        unsigned char *p  = bf;        while (byte_line_len <= (buf_len - (p - bf))){/*如果byte_line_len 的长度还有(buf_len - (p - bf))这么长就可以继续*/                unsigned int b = *bl & 0xff;                /*memchr(const void *buf, int ch, size_t count):从buf所指内存区域的前count个字节查找字符ch*/                if ((p = (unsigned char *) memchr(p, b, buf_len - (p - bf))) != NULL){/*查找b*/                        if ( (memcmp(p, byte_line, byte_line_len)) == 0)/*如果找到返回*/                                return p;                        else/*找不到就往下移一个*/                                p++;                }else{                        break;                }        }        return NULL;}
[解决办法]
在buf中搜索子串byte_line。
另外两个参数是这两个字符串的长度。

byte_line_len <= (buf_len - (p - bf)))
检查待搜索的字符串能够满足长度大于等于待搜索字符串的长度。
(不满足的话肯定搜索不到子串)

读书人网 >C语言

热点推荐