kmp算法,有什么问题,运行结果不正确

#include<stdio.h>
#include<string.h>
int main()
{
char str[100],str1[100];
printf("请输入一个主串:\n");
gets(str1);
printf("请输入一个模式串:\n");
gets(str);
int j=0,next[100];
int m=0,n;
next[0]=0;
for(int i=1; i<=strlen(str); i++) {
while(j>0&&str[i]!=str[j])
j=j-1;
if(str[i]==str[j]) {
j++;
next[i]=j;
}
}
for(n=0; n<strlen(str1); n++) {
if(str[m]==str1[n]) {
m++;
}
else if(str[m]!='\0'){
m=next[m];

    }
    else if(str[m]=='\0')
    break;
}
if(m==strlen(str))
    printf("%d",n-m);
else printf("无相同串");

}

if(str[m]==str1[n]) {
m++;
}
这里面n没加