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

如何将数组赋值给指针?C语言赋值时报invalid lvalue错误如何解决

问题根因

  • 语法层面:uint8_t* (rcm)[]声明的是元素为uint8_t指针的未指定长度数组,属于C语言中的不完整类型,标准不允许对不完整数组类型的左值直接执行赋值操作,这是触发invalid lvalue in assignment报错的直接原因。
  • 类型层面:&str的类型为uint8_t (*)[11](指向长度为11的uint8_t数组的指针,11为字符串shutdown 1的字符总数+结尾空字符长度),和你声明的rcm类型完全不兼容,即使语法合法也会报类型不匹配错误。

解决方法

根据你的实际使用场景选择对应修改方案:

方案1:rcm用于指向str数组

调整rcm的声明语法,把指针标识符*放到括号内部,明确声明为「指向uint8_t数组的指针」:

main(){
uint8_t id = 1;
uint8_t str[] = "shutdown 1";
uint8_t (*rcm)[]; // 修改声明,*放到括号内

rcm = &str; // line 83 此时赋值合法无警告
}

如果要更稳妥避免后续解引用的类型问题,可以直接声明时指定数组长度:

uint8_t (*rcm)[11] = &str;
// 后续可以直接通过(*rcm)[下标]访问数组元素

方案2:rcm是存储uint8_t指针的数组

先指定数组的固定长度,再给对应下标元素赋值:

main(){
uint8_t id = 1;
uint8_t str[] = "shutdown 1";
uint8_t* rcm[1]; // 指定数组长度为1

rcm[0] = str; // 数组名str自动退化为指向首元素的uint8_t*指针,赋值合法
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:03