Заполнение структуры данными из массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно заполнить структуру байтами из массива. Помогите, пожалуйста, примером.
Листинг программы
  1. typedef struct _ELEMENT
  2. {
  3. char number;
  4. char * about;
  5. }ELEMENT;
  6. ELEMENT arr[20]; // сюда нужно разложить содержимое массива d
  7. char d[] = {0x00, 0x01, 0x02, 0x03, ..., 0xff}; // 40 элементов массива
Цель - в цикле заполнить структуры arr[i] так: массив d разбивается на группы по 4 элемента, number - номер группы из 4 байт, about - эти 4 байта подряд.
Листинг программы
  1. arr[i].number = i;
  2. strncpy(arr[i].about, (char*)d, 4);
Нужный результат:
Листинг программы
  1. arr[i].number = 0; // это работает
  2. arr[i].about = {0x00, 0x01, 0x02, 0x03}; // здесь вместо нужных байт другие значения.
При попытке непосредственного присваивания без функций копирования получается, что копируется вся строка байт целиком и ограничить её 4 элементами не удается.

Решение задачи: «Заполнение структуры данными из массива»

textual
Листинг программы
  1. #define NUM_ELEMENTS 10
  2.  
  3. typedef struct _ELEMENT
  4. {
  5.     char number;
  6.     char * about;
  7. }ELEMENT;
  8.  
  9. int main()
  10. {
  11.  
  12.     char d[] = {.....};
  13.  
  14.  
  15.     ELEMENT arr[NUM_ELEMENTS];
  16.     int about_size = 4;
  17.     int i = 0, j = 0;
  18.  
  19.     for (i = 0; i < NUM_ELEMENTS; i++)
  20.     {
  21.         arr[i].number = i;
  22.         arr[i].about = malloc(about_size * sizeof (char));
  23.         memcpy(arr[i].about, &d[j], about_size * sizeof(char));
  24.             j += about_size;
  25.     }

Объяснение кода листинга программы

  1. Объявляется массив d типа char с неизвестными элементами.
  2. Создается структура ELEMENT, которая состоит из двух полей: char number и char *about.
  3. Создается массив arr типа ELEMENT с размером NUM_ELEMENTS.
  4. Инициализируется переменная about_size значением 4.
  5. Инициализируются переменные i и j значением 0.
  6. В цикле for, который выполняется от 0 до NUM_ELEMENTS, выполняются следующие действия: а) arr[i].number присваивается значение i. б) arr[i].about = malloc(about_size sizeof (char)); выделяется память под строку about. в) memcpy(arr[i].about, &d[j], about_size sizeof(char)); копируются элементы массива d в arr[i].about. г) j увеличивается на about_size.
  7. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы