代码如下,运行到插入和查找的时候会没办法继续,返回值3221225477,请问是哪里出了问题?如何检查修改 谢谢
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<string.h>
#define N 10
#define error 0
#define ok 1
struct {
char id[N];
char name[N];
float price;
}book;
struct lnode {
book data;
struct lnode* next;
};
//头插法
struct lnode* creatlist1(struct lnodet l, int n) {
lnode p;
int i;
for (i = 0; i < n; i++)
{
p = (struct lnode*)malloc(sizeof(lnode));
printf("输入数据 %d:", i + 1);
scanf("%s %s %f", p->data.id, p->data.name, &p->data.price);
p->next = l->next;
l->next = p;
}
return l;
}
//输出
int printlist(struct lnode* l)
{
lnode* p;
int i;
p = l->next;
while (p != NULL)
{
printf("data:%s %s %f\n", p->data.id, p->data.name, p->data.price);
p = p->next;
}
return ok;
}
//插入
int insertlist(struct lnode* l,int i,book e){
int j;
lnode* p;
lnode* s;
j=0;
p = l;
while(p && (j<i-1)){
p=p->next;
j++;
}
if(!p||j>i-1)
{ return error;
}
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
//查找
void sreach(struct lnode* l)
{ lnode *p;
char id[N];
int i;
int j;
int flag;
p=l;
i=1;
printf("请输入书的id:\n");
scanf("%s",id);
while(p!=NULL){
if(strcmp(p->data.id,id) == 0)
{
flag=1;
j=i;
}
p=p->next;
i++;
}
if(flag==1){
printf("书的位置e:%d\n",j);
}
else
{
printf("表中无此书e\n");
}
}
int main()
{
struct lnode* l;
int n;
int p;
book e;
printf("请输入表L元素个数n:\n");
scanf("%d", &n);
intlist(&l);
creatlist1(l, n);
printlist(l);
printf("请输入要插入的位置p:\n");
scanf("%d",&p);
printf("请输入要插入的元素e:\n");
scanf("%s %s %f",e.id,e.name,e.price);
insertlist(l,p,e);
printlist(l);
sreach(l);
}