编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。 例子如:字符串中原有的内容为:abcdefg,则

void fun(char*s)
{int i,n=0;
char *p=s;
while(*p!='\0')
{p++;
n++;}
for(i=0;i<n;i++)
{
s[i]=*p;
p--;
}
s[n]='\0';
}为什么运行不出来结果 哪错了呢??

for(i=0;i<n;i++)
{
s[i]=*p;
p--;
}

你这样子的话,前半段是后半段的数据,而后半段又复制了前半段(这个前半段是改后的前半段)
应当:
void fun(char*s)
{int i,n=0;
char *p=s;
while(*p!='\0')
{p++;
n++;}
for(i=0;i<n/2;i++)
{
char ch;
ch=s[i];
s[i]=*(--p);
*p=ch;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-05
我把你的函数稍微改了一下,测试过后正确了,这要是这里要记录原来s[i]的值,就是说s[0]=*p
之后,s[0]被覆盖,当p--到s[0]时,这时原来那个s[0]已被覆盖,找不到了,所以要记录临时值,
我这里用交换的原理
void fun(char*s)
{
int i,n=0;
char *p=s,temp;
while(*p!='\0')
{
p++;
n++;
}
for(i=0;i<=(n-1)/2;i++)
{
temp=s[i];
s[i]=*(p-1);
*(p-1)=temp;
p--;
}
s[n]='\0';
}追问

临时值交换那能在说说吗?没太看懂,谢谢~

相似回答