2012-03-02 84 views
0

我有这样的结构像以下:指针传递到一个初始化结构中的功能

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

'炭静态[10]'?你是如何声明一个名为'static'0.0的字段? – cnicutar 2012-03-02 15:36:19

+0

抱歉,纠正它。 – CodeBladeRunner 2012-03-02 15:37:56

+0

'len'有多大? – cnicutar 2012-03-02 15:38:50

回答

0

memmove()?我想你打算使用memcpy()或strcpy()或甚至strncpy()!

另外double **(可能)不需要在my_fun(void **data) void指针可以指向任何东西,包括一个void指针。 (但取决于功能定义,未显示)

在这种情况下,my_fun ((void**) &ds);中的&符号(也不是cast)也不是必需的。 任何指针可以被铸造成一个空指针中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; 
+0

'memmove()'有什么问题?它只是知道如何处理重叠缓冲区的memcpy()。在技​​术上, – 2012-03-02 17:34:39

+0

没有什么不妥。但是在这种情况下缓冲区不能重叠,所以不需要memmove()。 len参数仍然是错误的潜在向量,与用于复制的函数无关。 – wildplasser 2012-03-02 17:39:53

+0

1.你是对的*虚空***的东西。我应该注意到。我会运行你的建议并发布更新。感谢您的评论 – CodeBladeRunner 2012-03-02 19:10:27