它返回的是定位到子串的开始位置。
char *FindSubstr(char *buf, int b_len, char *pat, int p_len)
{
char *b_idx; /* index ptr into the data buffer */
char *p_idx; /* index ptr into the pattern buffer */
char *b_end; /* ptr to the end of the data buffer */
int m_cnt = 0; /* number of pattern matches so far... */
#ifdef DEBUG
unsigned long loopcnt = 0;
#endif
/* mark the end of the strs */
b_end = (char *) (buf + b_len);
/* init the index ptrs */
b_idx = buf;
p_idx = pat;
do
{
#ifdef DEBUG
loopcnt++;
#endif
if(*p_idx == *b_idx)
{
if(m_cnt == (p_len - 1))
{
return b_idx-m_cnt;
}
m_cnt++;
b_idx++;
p_idx++;
}
else
{
if(m_cnt == 0)
{
b_idx++;
}
else
{
b_idx = b_idx - (m_cnt - 1);
}
p_idx = pat;
m_cnt = 0;
}
} while(b_idx < b_end);
/* if we make it here we didn't find what we were looking for */
return NULL;
}
另外,区别一下strstr(),它使用的前提是主串是字符串,也就是中间如果含空字符就会停下。