表达式必须是一个可修改的左值错误在c中

r9f1avp5  于 2022-12-22  发布在  其他
关注(0)|答案(2)|浏览(174)

我尝试在c中用struct给一些字符串赋值empty,代码如下:

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

    }
}

这在主要功能中

table s[N];
initializer(s);

这是我的结构体:

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

typedef struct table table;

我仍然必须声明标记为-1,但我想这不应该解决这个错误;
我做错了什么?

nc1teljy

nc1teljy1#

不能将字符串赋给char数组。请使用strlcpy

qoefvg9y

qoefvg9y2#

仅当对象是可修改的L值时,才可以使用=运算符修改对象。来自6.3.2.1p1:
一个可修改的左值是一个左值,它不具有数组类型,不具有不完全类型,不具有常量限定类型,并且如果它是一个结构或联合体,则不具有任何具有常量限定类型的成员(递归地,包括所有包含的聚合或联合体的任何成员或元素).
name成员的类型为char[10],因此无法使用=运算符对其赋值。请使用专用函数strcpy

strcpy(s[i].name, "Empty");

相关问题