The problem with your code is that in this declaration
struct point B = {A.a, A.b, A.name};
the last initializer A.name has the pointer type char * that is used to initialize a character array. You may not initialize an array with a pointer.
You could just write
struct point B = A;
Take into account that due to this initialization
struct point
{
int a, b;
char name[5];
} A = {3, 5, "plane"}, B;
the character array A.name is not contain a string because there is no space in the array for the terminating zero character '\0' of the string literal.
As a result you may not use the format string %s in this call of printf
printf("%d %d %s", B.a, B.b, B.name);
Instead you can write
printf("%d %d %.*s", B.a, B.b, ( int )sizeof( B.name ), B.name);
That is your program can look like
#include <stdio.h>
struct point
{
int a, b;
char name[5];
} A = {3, 5, "plane"}, B;
int main( void ){
struct point B = A;
printf("%d %d %.*s", B.a, B.b, ( int )sizeof( B.name ),B.name);
}
If you want that the character array name would contain a string then you need to enlarge its size at least by one more character like
struct point
{
int a, b;
char name[6];
} A = {3, 5, "plane"}, B;
In this case you may use the following call of printf
printf("%d %d %s", B.a, B.b, B.name);