Błąd segregacji podczas zapisywania do ciągu [duplikat]

To pytanie ma już odpowiedź tutaj:

Dlaczego dostaję błąd segmentacji podczas zapisu do łańcucha zainicjowanego przez „char * s”, ale nie „char s []”? 17 odpowiedzi

Próbuję napisać lokalną funkcję odwrotną i prawie dokładnie śledziłem kod online, ale uruchomienie następującego programu powoduje błąd magistrali. Czy przekazuję niewłaściwy rodzaj argumentu do reverse ()?

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;
}

questionAnswers(0)

yourAnswerToTheQuestion