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

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

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

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

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

textual
Листинг программы
#define NUM_ELEMENTS 10
 
typedef struct _ELEMENT
{
    char number;
    char * about;
}ELEMENT;
 
int main()
{
 
    char d[] = {.....};
 
 
    ELEMENT arr[NUM_ELEMENTS];
    int about_size = 4;
    int i = 0, j = 0;
 
    for (i = 0; i < NUM_ELEMENTS; i++)
    {
        arr[i].number = i;
        arr[i].about = malloc(about_size * sizeof (char));
        memcpy(arr[i].about, &d[j], about_size * sizeof(char));
            j += about_size;
    }

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

  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
Похожие ответы