请教:看看程序是什么东东

请问:看看程序是什么错误?一个实现字符串循环移动的程序比如abcdeAB 循环右移2位为ABabcde #include

请问:看看程序是什么错误?
一个实现字符串循环移动的程序
比如   "abcdeAB "   循环右移2位为   "ABabcde "


#include <iostream>
#include <string>
using   namespace   std;


int   main()
{
int   i,   n;
char   *p   =   "abcdefgAB ";
n   =   2;
char   *q;
char   *pNew;
pNew   =   q;

int   l   =   strlen(p);
for   (i=l-n;   i <l;   i++)
*(q++)   =   *p[i];     //error   C2100:   illegal   indirection
for   (i=0;   i <l-n;   i++)
*(q++)   =   *p[i];     //error   C2100:   illegal   indirection
cout   < <   pNew;
return   0;
}

请问错误怎么解决

[解决办法]
#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

int main()
{
int i, n;
char p[] = "abcdefgAB "; //最好不要是常量
char *q, *qNew;

int l = strlen(p);
q=new char[l+1]; //分配空间
n=2;
qNew = q; //保存指针

for (i=l-n; i <l; i++)
*(q++) = p[i];
for (i=0; i <l-n; i++)
*(q++) = p[i];
cout < < qNew;

system( "pause ");
return 0;
}