• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Значения Элементов Структуры Динамически

  • Автор темы Marty
  • Дата начала
M

Marty

Есть структура с большим количеством элементов (150-170 штук), как динамически присвоить значения элементам?
уже пол-дня рою гугл, не могу найти. Видимо нужны какие-то дополнительные инструменты использовать. не могу разобраться помогите
 
Q

qqwertty

как динамически присвоить значения элементам?
А что это в вашем понимании значит?

Ну если я предполагаю то, что вам нужно, то на С можно манипулировать адресами и заполнять структуру, не обращаясь по именам к полям. Но так делать не очень рекомендуется - перестроите структуру, все переписывать, ошибетесь в цифорке - ....... Не знаю что будет, но мало приятного. В С++ так ваще лучше никогда не делать, уже не помню с чем связано.

ИМХО, проще реорганизовать вашу структуру. 170 полей - это слишком.
 
M

Marty

Вы можите написать код как реализовать "то на С можно манипулировать адресами и заполнять структуру, не обращаясь по именам к полям. "
Спасибо
 
Q

qqwertty

Вы можите написать код как реализовать

C++:
#include<stdio.h>
#include<conio.h>

struct Struct
{
int a1;
int a2;
double a3;
};

int main(void)
{
//можно так
struct Struct A = {4,8,7.6};
//а можно и так, но лучше не надо
*(int *)&A = 10;
//как ко второму полю обратиться я не помню, так как хаки не запоминаю, ибо это чаще только вредит
printf("%d %d %lf\n", A.a1, A.a2, A.a3);
return 0;
}

ДОБАВЛЕНО: Хотя нет) вспомнил: *(int *)((int)&A + 4) = 10;

И еще: про выравнивание надо тоже не забывать, вобщем искренне не советую вторым способом пользоваться :)
 
M

Marty

так выходит только используя имя элемента (A.a1) можно к нему обратиться...а динамически перебрать все нельзя?

Добавлено: понятно...*(int *)((int)&A + 4) = 10;....осталось теперь только разобраться с тем что такое 4 и 10)))
Спасибо
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!