With an array, the name of the array, c, is a pointer to the array, so no cast is necessary.
When you cast c to char *, you are telling the compiler to take the value stored in c and use that as a char *. The compiler is complaining because a pointer is stored as a two-byte value (on most arduino boards), but c is a single byte. Changing to a two dimensional array, such as c, makes c refer to the two char stored in c and c, so the compiler is now satisfied that you are giving it two bytes of memory. There will be no warning/error message, but strcpy will not write to the array, but to whatever memory address is pointed to by the value stored in c.