这个代码为什么运行不出来(模糊查询)?求大神指教

void Svaguename(SqList &L)

{

typedef struct
{
    char son[50];
}Element;

int i,j,n,m,k=0,l;
char key[50],str[50];
printf("请输入要查找的书名:");
getchar();
scanf("%s",&key);
printf("ISBN              书名                     出版社         价格\n");

for(i=0;i<L.length;i++)
{
    int N1,N2=0;     //N1为str的长度 N2为str连续子串的个数
    N1=strlen(L.elem[i].name);
    for(n=1;n<=N1;n++)     //计算连续子串的个数
     N2+=n;

    strcpy(str,L.elem[i].name); 
    Element *b=(Element *)malloc(N2*sizeof(Element));  //申请与子串的个数相同的空间 
    for(n=1;n<=N1;n++)              //n控制子字符串的长度
    {   
        l=0;            
        while(1)       //while循环内为给一个子字符串数组赋值
        {   
            m=l;                                  
            for(j=0;j<=n;j++)           //j控制赋值
            {
                b[k].son[j]=str[m];       
                m++;
            }
            k++;
            l++;
            if(m==N1)
                break;
        }
    }

    for(n=0;n<N2;n++)    //挨个比对
        if(strcmp(b[n].son,key)==0)  
           printf("%-17s %-24s %-14s %.1f\n",L.elem[i].no,L.elem[i].name,L.elem[i].publish,L.elem[i].price);
    free(b);
}

}

字符串是否包含另一个字符串的方法试一下