我是写字符串检索。但是如果把jiansuo()这个函数中第二个if(cha(p2)==(p3-p2+1))的话就没问题了。也就是说后边不能==i,如果是i的话,就出错~~
#include
int cha(char *p1)
{
int num=0;
for (char *p = p1; *p!= '\0'; p++)
{
num++;
}
return num;
}
void jiansuo(char *p1,char *p2)
{
for (char *p = p1; p<(p+cha(p1)-cha(p2)); p++)
{
int i = 0;
for (char *p3 = p2; *p3 != '\0'; p3++,i++)
{
if (*p3 != *(p+(p3-p2)))
{
break;
}
if (cha(p2)== i)
{
printf("找到了!在第%d个",p-p1+1);
return;
}
}
}
printf("没找到\n");
}
void main()
{
char *o = "tiandiwuji";
char *a = "diwu";
jiansuo(o,a);
getchar();
}
有两个问题:
1.for (char *p = p1; p<(p+cha(p1)-cha(p2)); p++)应该改成for (char *p = p1; p<(p1+cha(p1)-cha(p2)); p++)
不然的话p<(p+cha(p1)-cha(p2))相当于p<p+6肯定恒满足啊,直到越界崩溃
2.if (cha(p2)== i )改成if (cha(p2)== i + 1)因为i++是在当次for循环之后才执行的,只要之前没有break说明当前字符是相等的
#include <stdio.h>
#include <string.h>
int cha(char *p1)
{
int num=0;
for (char *p = p1; *p!= '\0'; p++)
{
num++;
}
return num;
}
void jiansuo(char *p1,char *p2)
{
for (char *p = p1; p<(p1+cha(p1)-cha(p2)); p++)
{
int i = 0;
for (char *p3 = p2; *p3 != '\0'; p3++,i++)
{
if (*p3 != *(p+(p3-p2)))
{
break;
}
if (cha(p2)== i + 1)
{
printf("找到了!在第%d个",p-p1+1);
return;
}
}
}
printf("没找到\n");
}
void main()
{
char *o = "tiandiwuji";
char *a = "diwui";
jiansuo(o,a);
getchar();
}
if (*p3 != *(p+(p3-p2)))
->
if (*p3 != *(p+(cha(p3)-cha(p2))))