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

时间:2021-03-21 14:01:26

标签: c++

我正在尝试将一个动态结构数组的内容复制到另一个动态结构数组中,但我收到了错误“数组分配无效”,并希望有人能指出我正确的方向。

这是我的结构:

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;
}

最终,我试图加密 agentArr 的内容,然后将其复制到 encryptArr 但我现在只是想弄清楚如何复制。这是一门课程,我们还没有介绍 memcpy,所以这不是一个选项。

2 个答案:

答案 0 :(得分:2)

这比你想象的要容易。

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

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

答案 1 :(得分:0)

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

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

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

如果保证数组的内容总是字符串(以空字符结尾的字符序列),可以使用strcpy()复制它们。

(我将只显示 name 的代码,但 location 也应该这样处理)

        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];
        }