string is a pointer to a char. string2 is an array of char elements. Those two are different types.
In your second example, you are trying to assign a pointer to an array (string literals evaluate to pointers.) This makes no sense and isn't possible. It's really no different from:
int numbers[2];
int num;
numbers = # // How's that supposed to work?
People get a bit confused by this, because you can use the index operator [] on pointers, and the name of an array evaluates to a pointer to its first element. That doesn't mean that pointers are arrays, or vice versa. That's just some syntactic sugar to make access to the pointed to or contained data easier.