我正试图将一个动态结构数组的内容复制到另一个动态结构数组中,但我得到了一个错误,“无效的数组赋值”,希望有人能给我指明正确的方向。
下面是我的结构:
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,所以这不是一个选项。
比你想象的要容易。
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];
}