Erreur de segmentation lors de la modification d'une chaîne à l'aide de pointeurs?

Contexte

Je suis en train d'apprendre le C, et je vais essayer d'inverser une chaîne de caractères à l'aide de pointeurs. (Je sais que vous pouvez utiliser un tableau; c'est plus sur l'apprentissage sur les pointeurs.)

Problème

Je reçois des défauts de segmentation lorsque vous essayez d'exécuter le code ci-dessous. GCC semble ne pas aimer la *end = *begin; ligne. Pourquoi est-ce?

Surtout depuis que mon code est presque identique à le non-mal C de la fonction déjà discuté dans un autre question

#include <stdio.h>
#include <string.h>

void my_strrev(char* begin){
    char temp;
    char* end;
    end = begin + strlen(begin) - 1;

    while(end>begin){
        temp = *end;
        *end = *begin;
        *begin = temp;
        end--;
        begin++;
    }
}

main(){
    char *string = "foobar";
    my_strrev(string);
    printf("%s", string);
}

source d'informationauteur brice