我在编写一个在 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++。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)