Perche' nel secondo caso viene allocato lo spazio per la stringa nello stack dal compilatore e lì viene inizializzata con il valore indicato. Nel primo, hai solamente il puntatore e l'area in cui e' depositata la stringa (che e' una costante) e' posto in un segmento dell'eseguibile che sara' di sola lettura.

Dato che tu "scrivi" modificando le lettere da maiuscole in minuscole, nel primo caso hai l'errore (non puoi scrivere nell'area delle costanti) e nel secondo no perche' scrivi nello stack.