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

C语言报错expression must be a modifiable lvalue,结构体字符数组赋值问题

问题分析与解决

你的结构体定义完全没问题,错误出在char数组的赋值方式——C语言不允许直接用=给数组类型的变量赋值,这就是报错assignment to expression with array type的原因。

为什么会报错?

在C语言里,数组名本质是指向数组首元素的常量指针,它的值不能被修改。你没法用people[0].name = "my_name"这种方式,把字符串常量直接赋值给数组名这个常量指针。

两种解决方法

方法1:使用strcpy函数复制字符串

利用C标准库的strcpy函数(你已经包含了<string.h>,可以直接调用),把字符串常量复制到数组内存中:

#include <stdio.h>
#include <string.h>

typedef struct
{
    char name[30];
    char number[30];
}
phonebook_record;

int main(void)
{
    phonebook_record people[2];
    // 用strcpy完成字符串复制
    strcpy(people[0].name, "my_name");
    strcpy(people[0].number, "+555-000-0000");
}

方法2:定义时直接初始化

如果是在创建结构体数组的同时赋值,可以直接用初始化列表完成,不需要额外调用函数:

#include <stdio.h>
#include <string.h>

typedef struct
{
    char name[30];
    char number[30];
}
phonebook_record;

int main(void)
{
    // 定义结构体数组时直接初始化元素
    phonebook_record people[2] = {
        {"my_name", "+555-000-0000"},
        // 第二个元素留空会被自动初始化为空字符串
        {}
    };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:52:04