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

标签 c function struct

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

相关文章:

struct - CANoe CAPL结构初始化

c++ - 我如何在单独的头文件中的结构中定义一个 char* 数组?

c - & 是做什么用的,在上面的代码中它是如何使用的?

c - c中静态数组的广义函数

python - 在函数内定义变量

带有 JQuery POST 的 Javascript 函数始终返回未定义

javascript - 使用javascript发送post请求

c++ - 从基结构虚拟继承

c - 结构成员如何存储在小端机器上?

iphone - 在 Objective-C 中初始化为类变量时,在哪种内存上分配 C 结构