im试图制作程序,以动态分配的结构中存储人的姓氏和名称,然后在终端中打印。目前,在终端输入姓氏后,我出现了"分割故障"错误。我如何使它起作用?预先感谢!
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person{
char *last_name;
char *name;
};
struct person *p_person;
int main(void)
{
p_person=malloc(sizeof(struct person));
scanf("%s", p_person->last_name);
scanf("%s", p_person->name);
puts(p_person->last_name);
free(p_person);
return 0;
}
p_person->last_name
不能指向任何地方。您正在访问您甚至不允许的记忆。您调用访问它的不确定行为。解决方案是动态分配一些内存或在结构中使用char last_name[MAXLEN];
。
解决方案1:
struct person{
char last_name[50];
char name[50];
};
解决方案2:
p_person->last_name = malloc(50);
if( p_person->last_name == NULL){
fprintf(stderr,"error in malloc");
exit(1);
}
在解决方案2中,您也应该为name
做同样的事情。完成处理后,可以动态分配的内存。
scanf("%49s", p_person->last_name)
比缓冲区大小少。当scanf()
完成分解为字符串时,它会自动终止nul字符。