指针传递到一个初始化结构中的功能
我有这样的结构像以下:指针传递到一个初始化结构中的功能
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()!
另外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;
'memmove()'有什么问题?它只是知道如何处理重叠缓冲区的memcpy()。在技术上, – 2012-03-02 17:34:39
没有什么不妥。但是在这种情况下缓冲区不能重叠,所以不需要memmove()。 len参数仍然是错误的潜在向量,与用于复制的函数无关。 – wildplasser 2012-03-02 17:39:53
1.你是对的*虚空***的东西。我应该注意到。我会运行你的建议并发布更新。感谢您的评论 – CodeBladeRunner 2012-03-02 19:10:27
'炭静态[10]'?你是如何声明一个名为'static'0.0的字段? – cnicutar 2012-03-02 15:36:19
抱歉,纠正它。 – CodeBladeRunner 2012-03-02 15:37:56
'len'有多大? – cnicutar 2012-03-02 15:38:50