Ways To Handle the Exception “Error: assignment to expression with array type”

C programming is not language programmers are incognizant of. It is a general-purpose language ideally used to develop different software such as databases, operating systems, compilers, and so on. Despite being an old programming language, C is still popular among programmers as it is capable of supporting high-level and low-level language features. It is basically a compiled (C)programming language. Even beginners are trying to learn it by executing various programs. When using C, you may encounter the error “Error: assignment to expression with array type”.

You don’t need to worry or wonder how to get it resolved. We are here to help you solve the error with simple solutions. But first, have a look at how the error message shows up

How the error pops up

When you try to execute a new project, you get into trouble. Let’s take the look at the program code that returns the error message

#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;

The code used:

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

That’s when you get the error message.

"error: assignment to expression with array type error"

Solutions To Fix the Error Message “Error: assignment to expression with array type”

The error shows up because it is not allowed to directly assign a value to a string in C. Have a look at the solutions to tackle the error

Solution 1 – Use strcpy()

To solve the error, you need to modify the value by using strcpy() function.  To do that, follow the below code

strcpy(s1.name , "Egzona"); 
printf( "Name : %s\n", s1.name);

Solution 2 – Follow the instruction

You have defined ‘data’ in the code that must be the memory block that should fit 60 chars and 4 int. have a look at the code to see the data

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

And this is how it divides:

 ^ this is name              ^ this is surname              ^ this is age

With this, the memory is allocated on the stack. Like this:

data s1;

It copies the numbers as well as pointers (sometimes).

The following fails

s1.name = "Paulo";

It happens because s1.name is the beginning of the struct, which is 64 bytes long. While ‘Paula’ is a char that is 6 bytes long, it is 6 as it also has a trailing \0.  Hence. It tries to assign a pointer to a string.

In order to copy ‘Rossie’ into the struct at surname and ‘Paula’ at the name, follow the code

memcpy(s1.name,    "Paulo", 6);
memcpy(s1.surname, "Rossi", 6);
s1.age = 1;

The result is like this:


The strcpy() function works the same way, but it is aware of the termination \0, which does not require length.

An alternate to fix is to use a struct that can point char array of any specified length.

typedef struct {
  char *name;
  char *surname;
  int age;
} data;

It can create the following


Filling the struct with the help of pointers can make it work.

s1.name = "Paulo";
s1.surname = "Rossi";
s1.age = 1;

It shows this:


The pointers are 4 and 10.


We have discussed the solutions to fix the exception “Error: assignment to expression with array type”. Keeping the solutions and tips in mind when coding or using this post as a reference to solve the error can help. I hope you find it useful!

Posted in C

Leave a Reply

Your email address will not be published. Required fields are marked *