如何复制结构(这是结构中的结构)并将其填充到C ++中的结构数组中

How to copy a structure(which is a structure within structure) and fill it in the array of structure in C++

我有一个结构,结构中的结构为 显示在以下问题中:

我需要将上述结构的值提取到我拥有的另一个结构中created.This结构需要被视为结构数组。

typedef struct Sp_cashinfo
{
    LPSTR lpPhysicalPositionName;
    ULONG ulInitialCount;
    ULONG ulCount;  
}SP_CASHUNITINFO;

这个结构是一个结构数组,因为我需要以二维形式存储(即 7 次)

int CashUnitInfo(SP_CASHUNITINFO *Sp_cdm_cashinfo)
 {
     try
    {
        -----assigned the values----------------
        hResult = WFSGetInfo (hService,dwCategory,lpQueryDetails,dwTimeOut,&lppResult); //assigned the values ,got the response 0 ie success    
        fwCashUnitInfo = (LPWFSCDMCUINFO)lppResult->lpBuffer;               
        USHORT NumPhysicalCUs;
        USHORT count =(USHORT)fwCashUnitInfo->usCount;
        Sp_cdm_cashinfo = (SP_CASHUNITINFO*)malloc(7*sizeof(SP_CASHUNITINFO));      
        for(int i=0;i<(int)count;i++)
        {
    NumPhysicalCUs =fwCashUnitInfo->lppList[i]->usNumPhysicalCUs;
    for(int j=0;j<NumPhysicalCUs;j++)//storing the values of structure
    {
        Sp_cdm_cashinfo[i].lpPhysicalPositionName   =fwCashUnitInfo->lppList[i]->lppPhysical[j]->lpPhysicalPositionName;
        Sp_cdm_cashinfo[i].ulInitialCount           =fwCashUnitInfo->lppList[i]->lppPhysical[j]->ulInitialCount;
    }
    }
 return (int)hResult;
}

以上代码写在class库中,需要显示在class库中

但是由于内存分配问题,我不得不为我创建的结构获取垃圾值。 我已经成功填充了主结构((即)结构内的结构),我只需要该结构中的特定成员

你有这个结构:

typedef struct Sp_cashinfo
{
    LPSTR lpPhysicalPositionName;
    ULONG ulInitialCount;
    ULONG ulCount;  
}SP_CASHUNITINFO;

假设 LPSTR 来自 windows types 那么它是大多数现代系统上 char * 的类型定义。如果是这种情况,那么您需要为该数组分配内存以及为结构分配 space 。当你为这个结构创建 space 时,你预留了足够的内存来存储指针和其他 2 个数据成员,但是指针还没有指向任何有效的东西,你所做的一切都预留了足够的空间 space 存储指针。在代码片段中,这里的 char 数组似乎从未实际分配过任何内存,因此是垃圾值。

不过,我会将此结构更改为更惯用的 C++ 设计,如下所示:

#include <string>
struct Sp_cashinfo
{
    std::string lpPhysicalPositionName;
    uint32_t ulInitialCount;
    uint32_t ulCount;   

    Sp_cashinfo(std::string name, uint32_t initialCount, uint32_t count):
        lpPhysicalPositionName(name),
        ulInitialCount(initialCount),
        ulCount(count)
        {}
};

因为这种方法的内存管理更容易处理。 然后,您可以将这些结构存储在 std::vector 中,并制作一个实用函数以转换为原始数组 如果需要 .

将所有数据保存在容器中,然后在调用现有库的代码边界处进行转换是管理此类复杂情况的更好方法。