我知道这个问题非常普遍,解决方法也是众所周知的。但很长一段时间以来,我发现了一个我无法理解的错误。我正在尝试反转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/

10-11 23:16
查看更多