Заполнение структуры данными из массива - 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.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д