我正试图将一个动态结构数组的内容复制到另一个动态的结构数组中,但我收到了错误,"数组赋值无效",希望有人能给我指明正确的方向。
这是我的结构:
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,所以这不是一个选择。
这比你想象的要容易。
for (int i = 0; i < numOfAgents; i++)
encryptArr[i] = agentArr[i];
数组中的每一个值都满足"0"的所有要求;对象";,并且可以作为一个整体进行复制/移动。不需要麻烦复制struct
的每个成员。
应该使用std::string
而不是char
数组。它是可赋值的,还有更多优点,包括几乎无限长的字符串。
struct Agent
{
std::string name;
int idNum;
double years;
std::string location;
};
如果由于某种原因不幸地被迫使用数组,则必须分配每个元素。
如果保证数组的内容始终是字符串(以null字符结尾的字符序列(,则可以使用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];
}