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
相关产品推荐
相关产品推荐

