估计strstr内部使用了strlen来计算长度, 简单改进了下, 还有很多改进空间, 比如已经比较过的字符需要记录是否参与下一轮对比...
static char *mystrstr(char *pOri, int OriNum, char *pFind, int FindNum)
{
char *p = NULL;
if(OriNum < FindNum)
return NULL;
else
{
int i = 0, j = 0, Match = 0;
for(i = 0; i < OriNum && FindNum + i + 1 <= OriNum; i++)
{
int e = i;
for(j = 0; j < FindNum; j++)
{
if(!memcmp(pFind + j, pOri + e, 1))
{
e++;
Match++;
}
else
Match = 0;
}
if(Match == FindNum)
{
p = pOri + i;
break;
}
}
}
return p;
}
博客讨论了strstr函数在遇到数据流中包含0字符时的问题,指出其可能依赖strlen导致的计算长度错误。文章提出了初步改进方案,并提到有待进一步优化,包括避免重复比较的策略。
最低0.47元/天 解锁文章
903

被折叠的 条评论
为什么被折叠?



