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终止符。