передача указателя на инициализированную структуру в функции - PullRequest
0 голосов
/ 02 марта 2012

У меня есть такая структура как:

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 голосов
/ 02 марта 2012

memmove ()? Я предполагаю, что вы намеревались использовать memcpy () или strcpy () или, возможно, даже strncpy ()!

Кроме того, двойные ** (вероятно) не нужны в my_fun(void **data) Указатель void может указывать на что угодно, включая указатель void. (но это зависит от определения функции, которое не было показано)

В этом случае амперсанд (и отливка) в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...