C语言报错expression must be a modifiable lvalue,结构体字符数组赋值问题
问题分析与解决
你的结构体定义完全没问题,错误出在char数组的赋值方式——C语言不允许直接用=给数组类型的变量赋值,这就是报错assignment to expression with array type的原因。
为什么会报错?
在C语言里,数组名本质是指向数组首元素的常量指针,它的值不能被修改。你没法用people[0].name = "my_name"这种方式,把字符串常量直接赋值给数组名这个常量指针。
两种解决方法
方法1:使用strcpy函数复制字符串
利用C标准库的strcpy函数(你已经包含了<string.h>,可以直接调用),把字符串常量复制到数组内存中:
#include <stdio.h> #include <string.h> typedef struct { char name[30]; char number[30]; } phonebook_record; int main(void) { phonebook_record people[2]; // 用strcpy完成字符串复制 strcpy(people[0].name, "my_name"); strcpy(people[0].number, "+555-000-0000"); }
方法2:定义时直接初始化
如果是在创建结构体数组的同时赋值,可以直接用初始化列表完成,不需要额外调用函数:
#include <stdio.h> #include <string.h> typedef struct { char name[30]; char number[30]; } phonebook_record; int main(void) { // 定义结构体数组时直接初始化元素 phonebook_record people[2] = { {"my_name", "+555-000-0000"}, // 第二个元素留空会被自动初始化为空字符串 {} }; }
内容的提问来源于stack exchange,提问作者Riga
相关产品推荐
相关产品推荐

