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

SyntaxFix
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.name="Paolo";
s1.surname = "Rossi";
s1.age = 19;
getchar();
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

s1.name="Paolo" 
s1.surname="Rossi"

while if I do

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

it works. What am I doing wrong?

The solutions is

You are facing issue in

s1.name="Paolo";

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 §6.3.2.1

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

--

--

SyntaxFix
SyntaxFix

Written by SyntaxFix

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

No responses yet