#include<stdio.h>
#define M 255
typedef unsigned char SString[M+1];

int KMP_String(SString S,SString T);
void get_next(SString T);
void main()
{
    SString S,T;
    int i,j,position;
    printf("请输入主串的长度:");
    scanf("%d",&S[0]);
    printf("请输入模式串的长度:");
    scanf("%d",&T[0]);
    printf("请输入主串:");
    for(i=1;i<=S[0]+1;i++)
        scanf("%c",&S[i]);
    printf("请输入模式串:");
    for(j=1;j<=T[0]+1;j++)
        scanf("%c",&T[j]);
    position=KMP_String(S,T);
    printf("%d",position);
}

void get_next(SString T)
{
    int next[M+1];
    int i,j;
    i=1;
    j=0;
    next[1]=0;
    while(i<T[0])
    {
        if(j==0||T[i]==T[j])
        {
            ++i;
            ++j;
            next[i]=j;
        }
        else j=next[j];
    }
}
int KMP_String(SString S,SString T)
{
    int next[M+1];
    int i,j;
    i=1;
    j=1;
    get_next(T);
    while(i<=S[0]&&j<=T[0])
    {
        if(j==0||S[i]==T[j]){++i;++j;}
        else j=next[j];
    }
    if(j>T[0]) return i-T[0];
    else return 0;
}
是kmp算法的实现程序,运行会出错,请高手帮忙