• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

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

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

Marty

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

qqwertty

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

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

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

Marty

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

qqwertty

#4
Вы можите написать код как реализовать
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

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

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