Заполнение структуры данными из массива - C (СИ)
Формулировка задачи:
Нужно заполнить структуру байтами из массива. Помогите, пожалуйста, примером.
Цель - в цикле заполнить структуры arr[i] так: массив d разбивается на группы по 4 элемента, number - номер группы из 4 байт, about - эти 4 байта подряд.
Нужный результат:
При попытке непосредственного присваивания без функций копирования получается, что копируется вся строка байт целиком и ограничить её 4 элементами не удается.
Листинг программы
- typedef struct _ELEMENT
- {
- char number;
- char * about;
- }ELEMENT;
- ELEMENT arr[20]; // сюда нужно разложить содержимое массива d
- char d[] = {0x00, 0x01, 0x02, 0x03, ..., 0xff}; // 40 элементов массива
Листинг программы
- arr[i].number = i;
- strncpy(arr[i].about, (char*)d, 4);
Листинг программы
- arr[i].number = 0; // это работает
- arr[i].about = {0x00, 0x01, 0x02, 0x03}; // здесь вместо нужных байт другие значения.
Решение задачи: «Заполнение структуры данными из массива»
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;
- }
Объяснение кода листинга программы
- Объявляется массив d типа char с неизвестными элементами.
- Создается структура ELEMENT, которая состоит из двух полей: char number и char *about.
- Создается массив arr типа ELEMENT с размером NUM_ELEMENTS.
- Инициализируется переменная about_size значением 4.
- Инициализируются переменные i и j значением 0.
- В цикле 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.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д