我有以下结构:
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]被正确初始化但其他两个值为零。我在这里缺少什么?
答案 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;