我已获得以下代码
char * find(struct node *r,char *str)
{
r=head;
if(r==NULL)
{
return NULL;
}
while(r!=NULL)
{
if((strcmp(str,r->name) == 0))
{
printf("found %s\n",r->name);
char *p = malloc(256);
strcpy(p,(const char *)r->name);
return p;
}
r=r->next;
}
return NULL;
}
和main
:
void main ()
{
......
......
char *ret;
ret = find(n,"someone");
printf("%s\n",ret);
.......
}
使用上面的代码,我总是遇到分段错误。但是当我取消ret
变量时。有用。
void main ()
{
......
......
printf("%s\n",find(n,"someone"));
.......
}
答案 0 :(得分:7)
您的代码中存在许多问题(逻辑和编程)。例如,
r
作为参数,但请立即将其替换为head
。为什么用作参数?strcmp()
之前,您未在NULL
中检查r->name
。malloc()
的成功。find()
返回NULL,则使用printf()
中的返回值将导致undefined behaviour。现在,分段错误是未定义行为的副作用之一。首先纠正上述问题,使代码稳定。
注意:除此之外,值得一提的是,main()
的正确签名是int main(void)
。
答案 1 :(得分:0)
您检查NULL
上的r
,但不str
和name
。