C- malloc和结构,分割故障



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字符。

相关内容

  • 没有找到相关文章

最新更新