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.name="Paolo";
s1.surname = "Rossi";
s1.age = 19;
getchar();
return 0;
}
The code used:
s1.name="Paolo"
s1.surname="Rossi"
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:
[Paulo0----------------------,Rossi0-------------------------,0001]
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:
[---4,--10,---1]
The pointers are 4 and 10.
Conclusion
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!