我想创建一个结构,其中代表一个人.所以我开始声明一个结构人包含3个字段:- 名字:指向表示名-姓的字符串的指针:指向表示姓名和年龄的字符串的指针:表示年龄的整数。
现在我必须编写一个函数,分配一个新的People结构,并使用所提供参数的副本初始化它。
我的问题是程序总是崩溃。我不太明白如何才能不崩溃地填充结构(这是我学校的在线编译器)。有人能解释并纠正我吗?
这是它的样子:
数组.h:
#ifndef _PEOPLE_H_
#define _PEOPLE_H_
typedef struct {
char* firstname;
char* lastname;
int age;
} People;
People* createPeople(char* firstname, char* lastname, int age);
#endif
数组.c:
#include "People.h"
People* createPeople(char* firstname, char* lastname, int age) {
People people1;
people1.firstname = firstname;
people1.lastname = lastname;
people1.age = age;
}
2条答案
按热度按时间ql3eal8s1#
不能返回指向局部变量的指针,因为它在函数返回时超出了作用域。这意味着您需要传入Person的示例,或者像这里一样,使用
malloc()
来动态分配示例。我还对两个字符串调用了strdup()
,在本例中它不是必需的。但是createPeople()
函数不知道它们所指向的对象何时超出了作用域。小问题,People是复数,但是您只创建了一个Person。fafcakar2#
首先必须包含
stdlib.h
才能使用malloc
和free
,然后分配足够的内存来使用malloc
保存struct People
。如果内存分配失败,则返回
NULL
。如果内存分配顺利,则分配结构值的每个成员并返回它。