提问者:小点点

将结构的动态数组复制到另一个结构的动态数组


我正试图将一个动态结构数组的内容复制到另一个动态结构数组中,但我得到了一个错误,“无效的数组赋值”,希望有人能给我指明正确的方向。

下面是我的结构:

struct Agent
{
    char name[C_STRING_SIZE];
    int idNum;
    double years;
    char location[C_STRING_SIZE];
};

我的功能:

Agent *copyEncryptArray(Agent *agentArr, int numOfAgents)
{
    Agent *encryptArr = new Agent[numOfAgents];
    
    for (int i = 0; i < numOfAgents; i++)
    {
        encryptArr[i].name = agentArr[i].name;
        encryptArr[i].idNum = agentArr[i].idNum;
        encryptArr[i].years = agentArr[i].years;
        encryptArr[i].location = agentArr[i].location;
    }
    
    return encryptArr;
}

最后,我正在尝试加密代理的内容,然后复制到encryptArr,但我现在只是想弄清楚如何复制。这是一个课程,我们还没有涵盖memcpy,所以这不是一个选项。


共2个答案

匿名用户

比你想象的要容易。

for (int i = 0; i < numOfAgents; i++)
    encryptArr[i] = agentArr[i];

数组中的每个值都是满足一个“对象”的所有要求的东西,并且可以作为一个整体进行复制/移动。不需要麻烦复制结构的每个成员。

匿名用户

您应该使用std::string而不是char数组。它是可分配的,有更多的优点,包括几乎不受限制的字符串长度。

struct Agent
{
    std::string name;
    int idNum;
    double years;
    std::string location;
};

如果您由于某种原因不幸被迫使用数组,您将不得不为每个元素赋值。

如果保证数组的内容始终是字符串(由空字符终止的字符序列),则可以使用strcpy()复制它们。

(我将只显示名称的代码,但位置也应该这样处理)

        strcpy(encryptArr[i].name, agentArr[i].name);

如果不能保证这一点,则应使用memmove()(因为此处禁用memcpy())。

        memmove(encryptArr[i].name, agentArr[i].name, sizeof(encryptArr[i].name));

如果memmove()也不幸被禁止,那么最后一个选项是逐个分配元素。

        for (int j = 0; j < C_STRING_SIZE; j++)
        {
            encrypyArr[i].name[j] = agentArr[i].name[j];
        }