C 在函数中传递指向初始化结构的指针

C 在函数中传递指向初始化结构的指针,c,linux,data-structures,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 *)

我的结构如下:

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]正确初始化,但其他两个值为零。我在这里遗漏了什么?

memmove()?我猜您打算使用memcpy()或strcpy()甚至strncpy()

另外,
my\u-fun(void**data)
中(可能)不需要双**。空指针可以指向任何东西,包括空指针。(但这取决于未显示的函数定义)

在这种情况下,
my_-fun((void**)和ds)中的符号(也不是演员)也是不需要的。在C中,任何指针都可以转换为空指针

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;

字符静态[10]
?你是如何声明一个名为
static
0.o的字段的?很抱歉,更正了它。请显示编译并复制问题的真实代码。真实代码太大,无法在此处显示,我将编写一个小的,可以在此处编译并发布,这将复制问题。memmove()?你的意思是memcpy()或strcpy()甚至strncpy()!
memmove()
有什么问题吗?只有
memcpy()
知道如何处理重叠缓冲区。从技术上讲,它没有什么问题。但在这种情况下,缓冲区不能重叠,因此不需要memmove()。len参数仍然是潜在的错误向量,与用于复制的函数无关。1。关于空虚**的事你是对的。我应该注意到的。我将运行您的建议并发布更新。谢谢你的评论