Fallo de segmentación al escribir en una cadena [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué aparece un error de segmentación al escribir en una cadena inicializada con "char * s" pero no con "char s []"? 17 respuestas

Estoy tratando de escribir una función inversa en el lugar y he seguido el código en línea casi exactamente, pero al ejecutar el siguiente programa se produce un error de bus. ¿Estoy pasando el tipo de argumento incorrecto para invertir ()?

void reverse(char *str) {
    char * end = str;
    char tmp;
    if (str) {
        while (*end) {
            ++end;
        }
        --end;
        while (str < end) {
            tmp = *str;
            *str++ = *end;
            *end-- = tmp;
        }
    }
}

int main() {
    char *s = "sample";
    reverse(s);
    printf("%s\n");
    return 1;
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta