You did not post the definition of Node and Symbol but I suppose that Node.syms is an array. In this case the problem is that in line node1.syms = symbols; you try to change the the sysm member of Node struct but it is a constant varible (every array is constant, you can not change its location).
You have to possibilities.
1.) You copy the elements from the destination array to syms array:
int numelem = 256;
for (int i = 0; i < numelem; i++)
{
node1.syms[i] = symbols[i];
}
But it is very important to find out the perfect value of numelem variable. Namely it is nowhere checked that the node1.syms and symbols arrays have the same number of elements. If their lengths are not equal you can overrun on one of them addressing illegal memory areas. Another possible disadvantege is that in all the Node elements the syms array will have the same number of elements, you can change it only in compile time.
2.) You change the definition if Node structure:
struct Node {
//...
struct Symbol *syms;
//...
}
It this case your code will be complied and arrays node1.syms will be pointed to the array symbol and you do not have to take care about the length of the arrays. But it is important that in this case you will have only one array in the memory! So, you have to take into account that arrays are normally allocated on stack which means that after exiting from a method where the array was created the memory space of array will be freed as well. If you create node1 also it the method (as in your example) it is fine. But if you create node1 as a global variable than symbols array has to be global as well. In general we can say that both variable have to create in the same scope.
symsis declared asstruct Symbol[256]. you need to copy over one by one. FYI,symbolsis pointer too. if you don't understand this, it's better for you to review your textbook first.