我知道这个问题非常普遍,解决方法也是众所周知的。但很长一段时间以来,我发现了一个我无法理解的错误。我正在尝试反转C中的字符串。我的代码如下所示:
#include <stdio.h>
char *reverse(char *);
int main(void) {
char str[] = "Hello";
char *rev;
rev = reverse(str);
printf("The reversed string is %s", rev);
return 0;
}
char *reverse(char *str){
char *end = str;
char tmp;
if(str){
while(*end){
++end;
}
--end;
while(str < end){
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
return str;
}
结果,我得到的是“leH”,而不是“olleH”。有人能指出原因吗?
最佳答案
因为您返回递增的指针,所以使用另一个指针或索引表示法,它将工作,如下所示
char *reverse(char *str)
{
char *end;
char tmp;
int i;
end = str;
if ((str == NULL) || (*str == '\0'))
return str;
while (*end != 0)
++end;
--end;
i = 0;
while (str + i < end)
{
tmp = str[i];
str[i++] = *end;
*end-- = tmp;
}
return str;
}
当您返回
str
时,它不再指向字符串的开头。关于c - 反转字符串时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30293105/