字符串的有关问题,求高手帮看

字符串的问题,求高手帮看
#include<stdio.h>
#include<string.h>
#define MAX 100




void strrev(char* &s){
  int len = strlen(s);
char str[MAX];
  int k=0;
  for(int i=len-1;i>=0;i--){
  str[k++]=s[i];
  }
  strcpy(s,str);

}

int main() {
  int cases,n;
  char s[MAX];
  char ch;
  scanf("%d%d",&cases,&n);
  fflush(stdin); //刷新缓冲区或者使用getchar();
  while(cases--) {
  while(n--) {

  while(1) {
  scanf("%s",s);
  ch=getchar();
  strrev(s);
  if(ch!='\n') {
  printf("%s ",s);
  } else {
  printf("%s\n",s);
  break;
  }

  }
  }
  }


  return 0;
}




以上代码完成字符串在单词原来的位置上进行倒转。。。能运行处正常结果但是ACM通不过。。错误如下:

p.cc: In function 'int main()':
p.cc:31: error: invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char*'
p.cc:8: error: in passing argument 1 of 'void strrev(char*&)'

意思我也明白,就是要设置成常量,显然我不希望设置成常量,我本来就要修改,怎么办呢??

测试数据如下:
1

3
I am happy today
To be or not to be
I want to win the practice contest


输出效果:
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc



补充:1表示1组测试,3表示3句英文

------解决方案--------------------
反转函数改成这样:
C/C++ code

void strrev(char* s)
{
    char* p = s;
    char* q = s + strlen(s) - 1;
    char ch;

    while(p != q)
    {
        ch = *p;
        *p++ = *q;
        *q-- = ch;
    }
}

------解决方案--------------------
你是要单词逆置还是一句话逆置?