你这里的*t = s; 只表示定义了一个新指针,还是指向原来s数组存储的空间。
其实完全可以一次循环搞定,第0位置与第n-1个位置互换就行了,依次类推,
n为偶数时,n/2 - 1 与 n/2互换,如n为10,则0-9位置有效,4和5换;
n为奇数时,n/2 - 1 与 n/2 + 1互换,如n为11时,0-10位置有效,5在中间,4和6换;
实际上是循环n/2次,i 与 [(n-1) - i ]互换。
注意的是第n位置是'\0',不用换。
void fun(char*s)
{
int i,j=0,n;
char temp;
n=strlen(s);
for(i=0;itemp = s[i];
s[i] = s[n-1-i];
s[n-1-i] = temp;
}
}
这样改就好了:
void fun(char*s)
{
int i,j=0,n;
char t[100];//t不要和s指向同一个字符串,不然后面的赋值操作有点乱套。
n=strlen(s);
for(i=n-1;i>=0;i--)//i==0的时候也要复制过去。
t[j++]=s[i];
for(i=0;is[i]=t[i];
s[++i]='\0';
}
可以之间调用库函数strrev()
你可以这样写:
void srev(char *s)
{
char *p = s, *q = &s[strlen(s)-1];
char tmp;
while(p{
tmp = *p;
*p = *q;
*q = tmp;
p++, q--;
}
}