You need to enable JavaScript to run this app. C++动态结构体数组复制时char数组成员赋值报invalid array assignment错误
优惠活动
大模型
产品
解决方案
定价
更多

C++动态结构体数组复制时char数组成员赋值报invalid array assignment错误

报错根源

触发invalid array assignment的核心原因是:你定义的Agent结构体中,name和location都是固定长度的char数组(也就是C风格字符串)。C++语法规则明确禁止直接用=运算符对数组做整体赋值——因为数组名本质是指向数组首元素的地址常量,代码里写encryptArr[i].name = agentArr[i].name,相当于试图给常量地址重新赋值,自然会触发语法报错。

适配课程知识范围的解决方法

因为作业要求不能用未学习的memcpy函数,可直接使用已经掌握的C风格字符串处理逻辑完成复制,不需要引入超纲内容:

  • 对于idNum、years这类基础数值类型的结构体成员,原有直接赋值的写法完全合规,不需要修改
  • 对于name、location两个char数组类型的成员,用课程必然已经讲授过的strcpy函数完成逐字符拷贝即可,这个函数的作用就是把源C字符串的内容完整复制到目标字符数组中,完全满足复制需求。

修改后的正确代码

首先需要在代码头部引入strcpy对应的标准库头文件:#include <cstring>

Agent *copyEncryptArray(Agent *agentArr, int numOfAgents)
{
    Agent *encryptArr = new Agent[numOfAgents];
    
    for (int i = 0; i < numOfAgents; i++)
    {
        // 基础数值成员直接赋值即可
        encryptArr[i].idNum = agentArr[i].idNum;
        encryptArr[i].years = agentArr[i].years;
        // C字符串成员用strcpy完成逐字符复制,替代原来错误的数组直接赋值
        strcpy(encryptArr[i].name, agentArr[i].name);
        strcpy(encryptArr[i].location, agentArr[i].location);

        // 后续需要实现的加密逻辑,可以直接在循环内对拷贝后的字符做变换,不需要额外遍历
    }
    
    return encryptArr;
}
注意事项
  • strcpy在复制时会自动在字符串末尾补上C字符串要求的\0结束符,完全适配你结构体中定长char数组的存储格式
  • 这种实现方式完全没有用到超纲的内存操作函数,符合课程作业的知识范围要求,也能顺畅接入后续的加密逻辑。

内容的提问来源于stack exchange,提问作者user14457475

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 14:45:04