数组循环右移PTA问题

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置
#include
#define MAXN 10

void ArrayShift( int a[], int n, int m );

int main()
{
int a[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

ArrayShift(a, n, m);

for ( i = 0; i < n; i++ ) {
    if (i != 0) printf(" ");
    printf("%d", a[i]);
}
printf("\n");

return 0;

}

/* 你的代码将被嵌在这里 */
void ArrayShift( int a[], int n, int m ){
int b[m],i,c;
for(i=1;i<=m;i++){
b[i]=a[n-m+i];
}
for(c=1;c<=n-m;c++){
a[n-m+c]=a[c];
}
for(i=1;i<=m;i++){
a[i]=b[i];
}
}
输出结果乱码

for(i=1;i<=m;i++){
b[i]=a[n-m+i];
第一个就越界了 当i=m, n-m+i = n, 访问a[n]了,越界,应该i从0开始吧
下面的类似的方式在检查一下看看