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

C语言typedef定义struct学生结构体后为字符数组成员赋值报错如何解决

错误原因

你遇到的编译错误主要来自 s.subject[0].title[] = "Mathematics"; 这行代码,存在两个语法问题:

  • C语言中字符数组是地址常量,不能直接通过=运算符整体赋值,仅在声明初始化时可以用字符串直接赋值
  • 访问数组成员时后续跟空[]是非法语法,数组名本身就代表首地址,不需要额外加方括号

你写的s.subject[0].code = 1234;本身语法是合法的,报错是前一行代码的语法问题连带导致的。

修复方案

方案1:使用字符串拷贝函数赋值(动态赋值场景)

如果你是在代码运行过程中动态给title赋值,引入<string.h>头文件后使用strcpy函数完成字符串拷贝即可:

#include <string.h>

// 赋值示例
strcpy(s.subject[0].title, "Mathematics");
s.subject[0].code = 1234;

注意确保赋值的字符串长度(含末尾的\0结束符)不超过title数组的60字节长度,避免缓冲区溢出。

方案2:定义变量时直接初始化(初始值固定场景)

如果科目信息是固定的初始值,可以在定义student变量时直接通过初始化语法赋值:

student s = {
    // 前面的rno、name、section等字段可以按需赋值
    .subject = {
        {"Mathematics", 1234, 0},
        {"Chinese", 1235, 0},
        {"English", 1236, 0},
        {"Physics", 1237, 0},
        {"Chemistry", 1238, 0},
        {"Biology", 1239, 0}
    }
};

这种写法是C标准支持的初始化语法,不需要额外调用函数,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:03