我试图制作程序,将人的姓氏和名称存储在动态分配的结构中,然后将其打印在终端中。现在我已经得到了#34;分段错误"在终端输入姓氏后出错。我如何使它工作?提前谢谢!
我的代码:
#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;
}
答案 0 :(得分:1)
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终止字符。