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

C语言中expression must be a modifiable lvalue错误:结构体字符串赋值问题

问题分析:结构体字符串赋值错误原因及解决方法

我尝试通过以下C语言代码,利用结构体将字符串赋值为"Empty",同时还需要把marks初始化为-1,但当前代码存在错误,请问我哪里出错了?

结构体定义

struct table {
    char name[10];
    int marks;
} ;

typedef struct table table;

初始化函数代码

void initializer(table* s)
{
    for(int i = 0 ;i<N;i++)
    {
        s[i].name= "Empty";
    }
}

主函数调用代码

table s[N];
initializer(s);

错误原因

核心问题是字符数组不能直接用=赋值。你的结构体中name是char name[10]类型的字符数组,而"Empty"是字符串常量。C语言里数组名是不可修改的左值,直接用s[i].name = "Empty";属于非法操作,会触发编译错误。

修正方案

  1. 使用strcpy函数完成字符串复制:需要先包含头文件<string.h>,该函数可以把字符串常量的内容复制到字符数组中。
  2. 同时在循环中添加marks的初始化语句,将其设为-1。

修正后的初始化函数代码:

#include <string.h>

void initializer(table* s)
{
    for(int i = 0 ;i<N;i++)
    {
        strcpy(s[i].name, "Empty");
        s[i].marks = -1; // 初始化marks为-1
    }
}

额外说明

如果使用的是较老的C语言编译器(不支持C99标准),需要把for循环内的int i声明移到循环外部:

void initializer(table* s)
{
    int i;
    for(i = 0 ;i<N;i++)
    {
        strcpy(s[i].name, "Empty");
        s[i].marks = -1;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:50:26