In order for the first operation to work, p
must point to a writable block of memory at least 7 bytes in size. The second operation does not require it.
After the first operation the string remains writable: you can do this on the first string, but not the second:
*p= 's'; // Make the value all lowercase
The second pointer assignment points p
to a memory of a string literal; writing to that memory is undefined behavior.