Цитата(ViKo @ Aug 25 2018, 10:34)
У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды.
Вот у меня, например, кусок хедера
Код
// структура калибровочных параметров аналогового окружения АЦП
typedef struct
{
#define EEPROM_ADC_DEFAULT_ZERO 1.250000000
double Zero;
#define EEPROM_ADC_DEFAULT_REFERENCE 2.500000000
double Reference;
#define EEPROM_ADC_DEFAULT_SCALE 10.00000000
double Scale;
}TADCTrueConstant;
// структура загрузочных параметров в EEPROM
typedef struct
{
TADCTrueConstant ADC220V;
TADCTrueConstant ADC220C1;
TADCTrueConstant ADC220C2;
TADCTrueConstant ADC220C3;
TADCTrueConstant ADC220C4;
TADCTrueConstant ADC220C5;
TADCTrueConstant ADC200VA;
TADCTrueConstant ADC200VB;
TADCTrueConstant ADC200VC;
TADCTrueConstant ADC200CA;
TADCTrueConstant ADC200CB;
TADCTrueConstant ADC200CC;
TOneWireROM OneWireROM[ONE_WIRE_MAX_DEVICES_ON_BUS];
unsigned int DeviceSignature[HW_MCU_SIGNATURE_SIZE];
unsigned int CRC32;
}TEEPROM;
Согласно Вашей логике, Вы элементы TEEPROM писали бы как подобие элементов TADCTrueConstant, после чего копировали поэлементно
Код
// структура калибровочных параметров аналогового окружения АЦП
typedef struct
{
#define EEPROM_ADC_DEFAULT_ZERO 1.250000000
double Zero;
#define EEPROM_ADC_DEFAULT_REFERENCE 2.500000000
double Reference;
#define EEPROM_ADC_DEFAULT_SCALE 10.00000000
double Scale;
}TADCTrueConstant;
// структура загрузочных параметров в EEPROM
typedef struct
{
double Zero_ADC220V;
double Reference_ADC220V;
double Scale_ADC220V;
...
double Zero_ADC200CC;
double Reference_ADC200CC;
double Scale_ADC200CC;
// эту тоже заменить на содержимое TOneWireROM, чтобы получить копию
TOneWireROM OneWireROM[ONE_WIRE_MAX_DEVICES_ON_BUS];
unsigned int DeviceSignature[HW_MCU_SIGNATURE_SIZE];
unsigned int CRC32;
}TEEPROM;
или я что-то не так понял?
На мой взгляд способ, когда одни структуры содержат в себе другие структуры куда удобнее. И не надо поэлементно копировать.
Я присваиваю структуры структурам, если нужно что-то частично копирнуть, а если все нужно (например, в буфер отправки положить) - использую memcpy().