O que há de errado com o código abaixo?

O código deveria girar um vetor unidimensional de n elementos deixados pela posição i. por exemplo, com n = 8 e i = 3, o vetor abcdefgh é girado para defghabc.

O abaixo falha na função string_reverse. Não consegui descobrir o que há de errado lá.

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

void string_reverse(char* str, int left, int right )
{
    char *p1 = str + left;
    char *p2 = str + right;

    while (p1 < p2) 
    {
        char temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}


void rotate( char* str, int k )
{
    int n = strlen( str );
    string_reverse( str, 0, k - 1 );
    string_reverse( str, k, n - 1 );
    string_reverse( str, 0, n -1 );
}


int main(int argc, char* argv[])
{
    char* string = "abcdefghijk";

    rotate( string, 3 );    
    printf("%s",string );   
    getch();
    return 0;
}



it crashes at 

*p1 = *p2;
</code>

questionAnswers(3)

yourAnswerToTheQuestion