gpt4 book ai didi

c - 从C中的函数分配结构

转载 作者:行者123 更新时间:2023-12-04 11:55:45 25 4
gpt4 key购买 nike

我在编写一个在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com