C语言数据结构模式匹配

为什么模式匹配失败?编译正确。不是kmp。

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define MAXSTRLEN 255
#define OK 1
#define ERROR 0
typedef int Status;
typedef unsigned char SString[MAXSTRLEN+1];
Status StrAssign(SString T, char *chars){    
    int i;    
    if(strlen(chars)>MAXSTRLEN){
        return ERROR;
    }   
    else{
        T[0]=strlen(chars);     
        //复制chars指向的字符串的内容到串T 
        for(i=1;i<=T[0];i++){        
            //i是从1开始的,所以要-1,因为chars的字符数据是从0开始的
            T[i]=*(chars+i-1);  
        }
        return OK;
    }
}
Status Index(SString S,SString T,int pos){
    //返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。
    //其中,T为非空,1<=pos<=StrLength(S)。
    int i=pos,j=1;
    while(i<=S[0]&&j<=T[0]){
        if(S[i]==T[i]){i++;j++;
        }
        else{i=i-j+2;j=1;
        }
    } 
    if(j>T[0])return i-T[0];
    else return 0;
}
int main(){
    Status k;
    char c[MAXSTRLEN];
    SString S,T;
    //从键盘输入字符,生成定长串 
    printf("串生成:\n");
    printf("请输入主串S:");gets(c);
    if(!(StrAssign(S,c))){
        printf("串长超过MAXSTRLEN(=%d)!\n",MAXSTRLEN);
        exit(0);
    }
    printf("请输入模式串T:");gets(c);
    if(!(StrAssign(T,c))){
        printf("串长超过MAXSTRLEN(=%d)!\n",MAXSTRLEN);
        exit(0);
    }
    k=Index(S,T,1);
    if(!k)printf("匹配失败");
    else ("匹配成功,首次出现位置%d",k); 
    return 0;
}

img