版本一:
/*使用编译器默认对齐方式*/
typedef struct tagInfo
{
int iNum;
char szName[10];
int iAge;
}stINFO;
stINFO gstMessage[] =
{
{10, "liming", 100},
{20, "zhangsan", 200},
{30, "jack", 300}
};
stINFO gstSubMessage[] =
{
{50, "plato", 550},
{55, "socrates", 800}
};
int main()
{
int iNum = 0;
int i = 0;
stINFO *pAll = NULL;
int iSubNum = 0;
iSubNum = sizeof(gstSubMessage) / sizeof(stINFO);
iNum = sizeof(gstMessage) / sizeof(stINFO);
pAll = (stINFO *)malloc((iNum + iSubNum) * sizeof(stINFO));
if (pAll == NULL)
{
printf("alloc memory failed!/n");
return 0;
}
memset(pAll, 0, (iNum + iSubNum) * sizeof(stINFO));
/*连接*/
memcpy(pAll, gstMessage, sizeof(gstMessage));
memcpy((pAll + iNum), gstSubMessage, sizeof(gstSubMessage));
for (i = 0; i < (iNum + iSubNum); i++)
{
printf("/nÐòºÅ:%d/tÐÕÃû:%s/tÄêÁä:%d/n", pAll[i].iNum, pAll[i].szName,
pAll[i].iAge);
}
free(pAll);
pAll = NULL;
return 0;
}
版本二:
/*ʹÓñàÒëÆ÷ĬÈ϶ÔÆ뷽ʽ*/
typedef struct tagInfo
{
int iNum;
char szName[10];
int iAge;
}stINFO;
static stINFO* GetAllMessage(stINFO *pFirstSub, int iFirstNum,
stINFO *pSecondSub, int iSecondNum)
{
stINFO *pTemp = NULL;
int iNum = iFirstNum + iSecondNum;
pTemp = (stINFO *)malloc(iNum * sizeof(stINFO));
if (pTemp == NULL)
{
printf("alloc memory failed!/n");
return NULL;
}
memset(pTemp, 0, iNum * sizeof(stINFO));
memcpy(pTemp, pFirstSub, (iFirstNum * sizeof(stINFO)));
memcpy((pTemp + iFirstNum), pSecondSub, (iSecondNum * sizeof(stINFO)));
return pTemp;
}
int main()
{
int i = 0;
stINFO gstMessage[] =
{
{10, "liming", 100},
{20, "zhangsan", 200},
{30, "jack", 300}
};
stINFO gstSubMessage[] =
{
{50, "plato", 550},
{55, "socrates", 800}
};
int iFirstNum = sizeof(gstMessage) / sizeof(stINFO);
int iSecondNum = sizeof(gstSubMessage) / sizeof(stINFO);
stINFO *pAll = GetAllMessage(gstMessage, iFirstNum,
gstSubMessage, iSecondNum);
if (pAll == NULL)
{
printf("pAll is Null ptr/n");
return 0;
}
for (i = 0; i < (iFirstNum + iSecondNum); i++)
{
printf("/nÐòºÅ:%d/tÐÕÃû:%s/tÄêÁä:%d/n", pAll[i].iNum, pAll[i].szName,
pAll[i].iAge);
}
free(pAll);
pAll = NULL;
return 0;
}