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

C/C++ char数组初始化报错:expression must be a modifiable lvalue

数组初始化与赋值的差异解析

为什么char key[4] = "1";能正常运行

这是数组初始化操作,属于C/C++的语法特例:在声明数组的同时用字符串字面量初始化时,编译器会自动把字符串的内容(包括末尾的'\0')拷贝到数组内存中,这种写法仅允许在数组声明阶段使用。

为什么newNode->key = "1";会报错

newNode->key是结构体中的数组成员,此时它作为数组名,在表达式中会隐式转换为指向数组首元素的指针(char*)。但数组本身是一块固定大小的连续内存,并非可修改的指针变量——C/C++不允许直接用赋值运算符=给整个数组赋值,这就是你看到"expression must be a modifiable lvalue"错误的原因。

本质区别:初始化是声明时的特殊语法,而赋值操作无法直接作用于整个数组。

正确的赋值方式

要给结构体中的数组赋值,需要逐个拷贝字符,你已经实现了m_strcpy函数,直接调用即可:

m_strcpy(newNode->key, "1");

也可以使用标准库的strcpy函数(需要包含<cstring>头文件):

#include <cstring>
// ...
strcpy(newNode->key, "1");

注意:确保目标数组的大小足够容纳字符串(包括末尾的'\0'),这里newNode->key是char[5],完全可以容纳"1"(仅需2个字节:'1'和'\0')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:57:18