У меня есть глобальный массив «SocietyName», который является указателем на локальный массив «SocietyNameFinal».Затем скопируйте локальный массив в void «CITY.stAREA1.pvSociety» и «CITY.stAREA2.pvSociety».поэтому я могу использовать две разные копии массива для отдельного использования.любая модификация в одной пустоте не повлияет на другую пустоту.Как я могу это сделать?
В настоящее время, когда у меня есть первая запись в функции «SocietyInit», stAREA1.pvSociety имеет первый элемент как «TOM».когда вторая запись в функции stAREA2.pvSociety имеет первый элемент как «JERRY», но я также замечаю, что первый элемент stAREA1.pvSociety также изменяется на «JERRY» (поскольку я использую один и тот же указатель для обоих).Я хочу, чтобы первый элемент stAREA2.pvSociety назывался «TOM», а stAREA2.pvSociety - «ДЖЕРРИ».как я могу получить это?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PERSON_NAME(sPersonName) { 0, 0, sPersonName }
#define SOCIETY_HEAD(sText) { 0, 0, sText }
char PersonName[32] = {0};
typedef struct
{
int SocietyNumber1;
int SocietyNumber2;
char const * const pszText;
} Text_st_t;
Text_st_t SocietyName[] =
{
PERSON_NAME(PersonName),
SOCIETY_HEAD("AMAR") // Many other array members
};
typedef struct
{
char szPersonName[15];
void *pvSociety;
} AREA_st_t;
typedef struct
{
AREA_st_t stAREA1;
AREA_st_t stAREA2;
} CITY_st_t;
typedef struct
{
CITY_st_t CITY_stAREA;
} State_st_t;
State_st_t* STATE, sample;
#define CITY STATE->CITY_stAREA
void SocietyInit(AREA_st_t *AREA);
int main()
{
STATE = &sample;
strcpy(PersonName, "DONAND");
strcpy(CITY.stAREA1.szPersonName, "TOM");
strcpy(CITY.stAREA2.szPersonName, "JERRY");
SocietyInit(&(CITY.stAREA1));
SocietyInit(&(CITY.stAREA2));
// Here I want to First member of structe. I had tried as below but not ok. How can i do it???
printf("stAREA1.pvSociety.szPersonName = %s\n", *((Text_st_t *)CITY.stAREA1.pvSociety)); // Here I want 'TOM'
printf("stAREA2.pvSociety.szPersonName = %s\n", *((Text_st_t *)CITY.stAREA2.pvSociety)); // Here I want 'JERRY'
printf("Finished");
return 0;
}
void SocietyInit(AREA_st_t *AREA)
{
Text_st_t *SocietyNameFinal = malloc(sizeof(SocietyName));
(void)memcpy(SocietyNameFinal, SocietyName, sizeof(SocietyName));
printf("===========================================\n");
printf("SocietyName[0].pszText = %s\n", SocietyName[0].pszText);
printf("SocietyNameFinal[0].pszText = %s\n", SocietyNameFinal[0].pszText);
printf("CITY.stAREA1.szPersonName = %s\n", CITY.stAREA1.szPersonName);
printf("CITY.stAREA2.szPersonName = %s\n", CITY.stAREA2.szPersonName);
printf("-------------------------------\n");
strcpy((char *)SocietyNameFinal[0].pszText, AREA->szPersonName);
printf("SocietyName[0].pszText = %s\n", SocietyName[0].pszText);
printf("SocietyNameFinal[0].pszText = %s\n", SocietyNameFinal[0].pszText);
printf("CITY.stAREA1.szPersonName = %s\n", CITY.stAREA1.szPersonName);
printf("CITY.stAREA2.szPersonName = %s\n", CITY.stAREA2.szPersonName);
printf("===========================================\n");
AREA->pvSociety = (Text_st_t *)SocietyNameFinal; // Copy local array to another global array
return;
}