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

如何初始化结构体字符数组?遇“Expression must have a modifiable lvalue”报错

嘿,我来帮你搞定这个问题!你遇到的“Expression must have a modifiable lvalue”错误,核心原因是结构体里的name是字符数组类型——在C语言中,数组名是指向数组首元素的常量指针,不能直接用赋值运算符=给整个数组赋值,就像你不能写char arr[50]; arr = "test";一样,编译器会判定你在试图修改一个不可变的左值,所以报错。

解决方案:用strcpy(或更安全的strncpy)

没错,你确实需要借助字符串拷贝函数来给结构体里的字符数组赋值,下面给你详细讲用法:

1. strcpy的基础用法

strcpy是C标准库<string.h>中的函数,作用是把源字符串的内容完整拷贝到目标字符数组里。使用前一定要先包含头文件:

#include <string.h>

比如你要给item[0].name赋值为"Gnar",可以这么写:

strcpy(item[0].name, champion1);
// 也可以直接用字符串字面量:strcpy(item[0].name, "Gnar");

2. 更安全的选择:strncpy

如果担心源字符串长度超过目标数组的容量(比如你的name是50字节,源字符串太长会导致缓冲区溢出),推荐用strncpy,它能指定最大拷贝长度:

strncpy(item[0].name, champion1, sizeof(item[0].name) - 1);
item[0].name[sizeof(item[0].name) - 1] = '\0'; // 手动添加字符串结束符,避免乱码

这里减1是为了留一个字节放字符串结束符\0——因为strncpy如果源字符串长度超过指定值,不会自动补\0,手动加上能避免输出时出现乱码。

3. 替代方案:结构体初始化时直接赋值

如果是在定义结构体变量的同时初始化,也可以不用拷贝函数,直接在初始化列表里给name赋值:

// 单个结构体变量初始化
ITEM sword = {"Long Sword", 10, 0, 5, 0, 1};

// 结构体数组初始化
ITEM item[10] = {
    {"Gnar's Item", 20, 5, 8, 0, 0},
    {"Vi's Gauntlets", 30, 0, 10, 0, 1},
    // 其他元素可继续按格式初始化
};
结合你的代码修改示例

把你的代码补充完整后,正确的写法大概是这样:

#include <stdio.h>
#include <string.h> // 必须包含这个头文件

typedef struct {
    char name[50];
    int attackDamage;
    int magicDamage;
    int defense;
    int power;
    int type;
} ITEM;

int main() {
    ITEM item[10];
    char itemset[5][5] = { 0 };
    char champion1[] = "Gnar";
    char champion2[] = "Vi";
    char champion3[] = "Fizz";
    char champion4[] = "Draven";
    char champion5[] = "Blitzcrank"; // 假设这里是完整的英雄名

    // 给第一个item的name赋值
    strcpy(item[0].name, champion1);
    // 给第二个item的name赋值,用strncpy更安全
    strncpy(item[1].name, champion2, sizeof(item[1].name) - 1);
    item[1].name[sizeof(item[1].name) - 1] = '\0';

    // 给item的其他字段赋值
    item[0].attackDamage = 15;
    item[0].defense = 5;
    // ... 其他字段同理赋值

    // 测试输出
    printf("Item 0 name: %s\n", item[0].name);
    printf("Item 1 name: %s\n", item[1].name);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:45