Как мне заполнить массив внутри структуры, используя offsetof () и указатели в C - PullRequest
0 голосов
/ 26 апреля 2019

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

typedef struct _st_L3 {
   int e;
   int f;
   int bb[5];
   int g;
} st_L3;

и я использую offsetof (), чтобы получить смещение всех элементов.

Как я могу скопировать значения в bb [5], используя memcpy, offsetof () и зная адрес базовой структуры?

Я пробовал это:

идет от 0-4

memcpy((base_address_of_st_L3 + offset + sizeof(int)*i ), &int_data, sizeof(int))

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Если я понимаю ваш вопрос, вы хотите скопировать и целое число в массив целых чисел размером 5?

Вы можете сделать это следующим образом:

((st_L3*)base_address_of_st_L3)->bb[0] = int_data;

Конечно, у bb останутся четыре целых числа, которые не будут инициализированы.

Или вы имели в виду, что int_data также является массивом из пяти целых чисел?

{
  int i;

[... snipped ...]

  for(i = 0; i < 5; i++)
  {
    ((st_L3*)base_address_of_st_L3)->bb[i] = int_data[i];
  }
}
1 голос
/ 26 апреля 2019

Как я могу скопировать значения в bb [5], используя memcpy, offsetof () и зная адрес базовой структуры?

Следующий фрагмент кода объявляет структуру и массив5 int с.Затем, используя memcpy, он копирует int's в элемент структуры bb.Я приведу указатель к void*, чтобы попытаться «обобщить» пример.

int main() {
     st_L3 var;
     int array[5]; // int_data
     void *pnt = &var; // base_address_of_st_L3 

     // using operator `[]`
     memcpy(&((char*)pnt)[offsetof(st_L3, bb)], array, sizeof(int) * 5);

     // using pointer arithmetics
     memcpy(((char*)pnt) + offsetof(st_L3, bb), array, sizeof(int) * 5);

     // one variable at a time
     for (int i = 0; i < 5; ++i) {
         memcpy(&((char*)pnt)[offsetof(st_L3, bb) + i], &array[i], sizeof(int));
     }
}

Обратите внимание, что выполнение арифметики с указателями на void* указатели недопустимо.Вот почему требуется приведение к char*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...