如何将数组赋值给指针?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
相关产品推荐
相关产品推荐

