我在编写一个在 C 中分配结构的函数时遇到问题。理想情况下,我希望该函数用传递给它的参数填充结构的字段。
我在头文件中定义了结构,如下所示:
typedef struct {
char name[NAME_SIZE]; //Employee name
int birthyear; //Employee birthyear
int startyear; //Employee start year
} Employee;
这就是我目前的功能:
void make_employee(char _name, int birth_year, int start_year) {
Employee _name = {_name,birth_year,start_year}; //allocates struct with name
} /* end make_employee function */
关于如何实现这一点的任何建议?
最佳答案
您当前代码的问题在于您创建的结构是在堆栈上创建的,并且会在函数返回后立即被清除。
struct foo
{
int a;
int b;
};
struct foo* create_foo( int a, int b )
{
struct foo* newFoo = (struct foo*)malloc( sizeof( struct foo ) );
if( newFoo )
{
newFoo->a = a;
newFoo->b = b;
}
return newFoo;
}
这将为您提供一个堆分配的对象。当然,您需要一个函数来释放该内存,否则这就是内存泄漏。
void destroy_foo( struct foo* obj )
{
if( obj )
free( obj );
}
void print_foo( struct foo* obj )
{
if( obj )
{
printf("foo->a = %d\n",obj->a);
printf("foo->b = %d\n",obj->b);
}
}
(顺便说一句,这种风格让你成为“面向对象”C 的一部分。向结构添加一些函数指针(以获得多态行为),你就会得到一些有趣的东西;虽然我会在这一点上为 C++ 争论。)
关于c - 从C中的函数分配结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911288/