Here is the code,
Code:
void reverseStr(char* l, char* r)
{
	char* p = l;
	char t;
	int len = 0;

	while(*p)
	{
		*r++ = *p++; 
		len++;
	}

	*r = '\0';
	
	p = r-len;
	r = r-1;

	while(p<r)
	{
		t = *r;
		*r-- = *p;
		*p++ = t;		 
	}

}

int main(int argc, char* argv[])
{
	char s[24] = "abcdefg";
	char r[24];

    reverseStr(s, r);

	cout<<r<<endl;
	return 0;
}
The output is "gfedcba". But I would expect it to be "dcba". Take a look at
while(p<r)
{
t = *r;
*r-- = *p;
*p++ = t;
}
r eventually will move to the middle of "gfedcba", which is "dcba". How come r points to 'g' finally? Thanks.