Заполнение структуры данными из массива - 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.
- Программа завершается.