¿Cambiar cadena literal en C a través de puntero? [duplicar]

Posible duplicado:
¿Por qué aparece un error de segmentación al escribir en una cadena?

Tengo el siguiente programa:

char *s     = "abcdf";
char s1[50] = "abcdf";

s1[0] = 'Q';   // Line 1
s[0] = 'P';    // Line 2

Por quéLine 1 funcionó correctamente yLine 2 causó que el programa se bloquee?