C - malloc 和结构,分段错误
C - malloc and structures, segmentation fault
我正在尝试制作程序,将人的姓氏和姓名存储在动态分配的结构中,然后在终端中打印出来。现在我在终端输入姓氏后出现 "segmentation fault" 错误。我如何让它工作?提前致谢!
我的代码:
#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终止符。
我正在尝试制作程序,将人的姓氏和姓名存储在动态分配的结构中,然后在终端中打印出来。现在我在终端输入姓氏后出现 "segmentation fault" 错误。我如何让它工作?提前致谢!
我的代码:
#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终止符。