C - malloc和结构,分段错误

时间:2017-12-02 14:12:09

标签: c segmentation-fault malloc structure

我试图制作程序,将人的姓氏和名称存储在动态分配的结构中,然后将其打印在终端中。现在我已经得到了#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;
}

1 个答案:

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

相关问题