“error: assignment to expression with array type error” when I assign a struct field ©

2 min readDec 7, 2022

I’m a beginner C programmer, yesterday I learned the use of C structs and the possible application of these ones about the resolution of specific problems. However when I was experimenting with my C IDE (Codeblocks 16.01) in order to learn this aspect of C programming, I’ve encountered a strange issue. The code is the following:

#include <stdio.h>

#define N 30

typedef struct{
char name[N];
char surname[N];
int age;
} data;

int main() {
data s1;
s1.surname = "Rossi";
s1.age = 19;
return 0;

During the compilation, the compiler (GCC 4.9.3–1 under Windows) reported me an error that says

“error: assignment to expression with array type error”

on instruction


while if I do

data s1 = {"Paolo", "Rossi", 19};

it works. What am I doing wrong?

The solutions is

You are facing issue in


because, in the LHS, you’re using an array type, which is not assignable.

To elaborate, from C11, chapter §6.5.16

assignment operator shall have a modifiable lvalue as its left operand.

and, regarding the modifiable lvalue, from chapter §

A modifiable lvalue is an lvalue that does not have array type, […]

You need to use strcpy() to copy into the array.

That said, data s1 = {"Paolo", "Rossi", 19}; works fine, because this is not a direct assignment involving assignment operator. There we're using a brace-enclosed initializer list to provide the initial values of the object. That follows the law of initialization, as mentioned in chapter §6.7.9

Each brace-enclosed initializer list has an associated current object. When no designations are present, subobjects of the current object are initialized in order according to the type of the current object: array elements in increasing subscript order, structure members in declaration order, and the first named member of a union.[….]

Know more solutions in syntaxfix.com




Curated Solutions On Popular Questions — On All Programming Languages, Cloud Computing, Tools etc