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";属于非法操作,会触发编译错误。
修正方案
- 使用
strcpy函数完成字符串复制:需要先包含头文件<string.h>,该函数可以把字符串常量的内容复制到字符数组中。 - 同时在循环中添加
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
相关产品推荐
相关产品推荐

