求高手查看这个函数的功能。
- 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)))
检查待搜索的字符串能够满足长度大于等于待搜索字符串的长度。
(不满足的话肯定搜索不到子串)