Comment résoudre une violation d'accès en écrivant une erreur de localisation?

J'ai un programme simple et je reçois violation d'accès à *(str + start). Pourquoi? Je devrais être en mesure de le changer. Droit?

void fn()
{
     char *str = "Hello wordl!";
     int end = strlen(str);
     int start = 0;
     end--;
     while(start < end)
     {
         *(str + start) = *(str + end);  <--- Access violation writing location *(str + Start).
         end--;
         start++;
     }
}

source d'informationauteur