关于指针*s1++的问题,如何解决?

请问这个代码是不是有问题啊,考试试卷上的

#include 
#include 
void fun(char *w,int n);
void main()
{   char *p="1234567";
    fun(p,strlen(p));
    puts(p);
}
void fun(char *w,int n)
{   char t,*s1,*s2;
    s1=w; 
    s2=w+n-1;
    while(s1

t = * s1++后,s1会向后移动一个位置,这是 * s1 = * s2--,交换的s1已经变了啊。后面的 * s2 = t也是,所以要交换后再移动

 t=*s1;
 *s1=*s2;
 *s2=t;
 s1++;
 s2--;