As KingsIndian points out, you can avoid the problem by dropping the assignment, since you really don't need the return value in this instance. However, this may help the future understand what is happening under the hood:
memcpy returns a pointer to destination. If "in" was a pointer, then that would be nice:
int from[2][3] = { {1,2,3}, {2,3,4} }; int into[3]; int *into_ptr = into; into_ptr = memcpy(into_ptr, from[0], 3 * sizeof(int)); // OK
The problem is that the βinβ is an array, not a pointer. Arrays in C are not variables, that is, they cannot be assigned, therefore, an error. Although he often said that arrays and pointers are equivalent, there are differences, and this is one thing. For more information on the differences between arrays and pointers, see here:
http://eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c/
Edit:
To avoid the problem at all, without completing any tasks, ignore the return value:
int from[2][3] = { {1,2,3}, {2,3,4} }; int into[3]; memcpy(&into[0], from[0], sizeof(into));