You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++报错‘expression must be a modifiable lvalue(137)’原因咨询

错误原因及解决办法

报错原因

在C/C++中,数组类型属于不可修改的左值。当你写templates[0].frame时,这个表达式代表结构体内部的二维数组,数组名虽然会隐式转换为指向首元素的指针,但它本身不能作为赋值操作的左操作数——你无法直接将另一个数组整体赋值给它,就像不能直接执行int a[5]; int b[5]; a = b;一样,这是语言语法规则的限制。

解决方法

方法1:用memcpy批量复制内存

因为两个数组的类型、大小完全一致,可以直接用memcpy复制整个内存块,效率最高:

#include <string.h> // 必须包含该头文件

memcpy(templates[0].frame, templateForehand1, sizeof(templates[0].frame));

sizeof(templates[0].frame)会自动计算整个二维数组的字节数,确保复制完整。

方法2:逐元素循环赋值

如果需要对每个元素做额外处理,或者不想用内存复制函数,可以手动遍历赋值:

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 50; j++) {
        templates[0].frame[i][j] = templateForehand1[i][j];
    }
}

方法3:修改结构体为指针类型(按需选择)

如果不需要复制数据,只是想让结构体引用原数组,可以把结构体里的数组改成指针:

struct templ_st {
    float (*frame)[50]; // 指向包含50个float的一维数组的指针
};

// 直接让指针指向目标数组
templates[0].frame = templateForehand1;

注意:这种方式不会复制数据,原数组内容修改后,结构体通过frame访问到的内容也会跟着变,适合共享数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:46:01