将指针传递给函数中的初始化结构

时间:2012-03-02 15:34:15

标签: c linux data-structures

我有以下结构:

typedef struct{
char static_data[10];
int a;
int b;
} my_ds;

我已将其初始化如下:

my_ds * ds = (my_ds *)malloc(sizeof(my_ds));
memmove(my_ds->static_data, buf, len);
ds->a = c;
ds->b = d;

并将其传递给函数:

int my_fun(void ** data);
my_fun((void *)&ds);

my_fun内部发生了什么,第一个字段,static [10]被正确初始化但其他两个值为零。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

的memmove()?我猜你打算用memcpy()或strcpy(),甚至strncpy()!

my_fun(void **data)中也可能不需要双**。空指针可以指向任何东西,包括空指针。 (但这取决于功能定义,未显示)

在这种情况下,my_fun ( (void**) &ds);中的&符号(也不是强制转换符号)也不需要。 任何指针都可以转换为C中的void指针。

my_ds * ds;
ds = malloc(sizeof *ds);
if (len >= sizeof my_ds->static_data) len = sizeof my_ds->static_data - 1;
memcpy(my_ds->static_data, buf, len);
my_ds->static_data[len] = 0;
ds->a = c;
ds->b = d;