我有以下代码
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"));
.......
}
最佳答案
您的代码中存在许多问题(逻辑和程序)。例如,
- 您接受
r
作为参数,但立即将其替换为head
。那为什么要用作参数呢? - 在
strcmp()
之前,您没有检查r->name
中的NULL
。 - 在使用返回的指针之前,您没有检查
malloc()
是否成功。 - 如果
find()
返回 NULL,在printf()
中使用返回值将导致 undefined behaviour .
现在,段错误是未定义行为的副作用之一。首先纠正上述问题以使您的代码稳定。
注意:除此之外,值得一提的是,main()
的正确签名是 int main(void)
。
关于c - 将返回的指针分配给变量时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746591/