Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用返回值反转字符串时出现问题?_C++ - Fatal编程技术网

C++ 使用返回值反转字符串时出现问题?

C++ 使用返回值反转字符串时出现问题?,c++,C++,我试图反转字符串,返回值作为反转字符串,输入参数作为输入字符串。 这是我的密码: char* reverseString(char* string) { static int i = 0; static char *revStr = new char[strlen(string)+1]; if (*string) { reverseString(string + 1); revStr[i++] = *string; }

我试图反转字符串,返回值作为反转字符串,输入参数作为输入字符串。 这是我的密码:

char* reverseString(char* string)
{
    static int i = 0;
    static char *revStr = new char[strlen(string)+1];
    if (*string)
    {
        reverseString(string + 1);
         revStr[i++] = *string;
    }
    return revStr;
}
int main(void)
{
    char* str = "Test it";
    cout << reverseString(str) << endl;;
}
我在visual studio 2013中尝试了此功能。我希望输出为:

ti-tseT
按任意键继续


但我没有得到正确的输出,在“tseT”之后添加了一些不需要的字符。有人能给我推荐一下吗?我不想更改函数参数和返回语法。

您需要注意最后的
'\0'

尝试添加
else
语句:

if (*string)
{
     revStr[i++] = *string;
    reverseString(string + 1);
}
else
    revStr[i] = '\0';

请解释为什么不使用
std::string
?如果这是一个有限制的作业,你应该把它们包括在问题中,这样我们才能给出适当的答案。使用string类或c++11,我可以轻松地完成它,但我的意图不是这样。我只想更正我的函数体。您没有在末尾添加原始c字符串结束指示符
'\0'
。这个问题可能还有很多重复的地方。@A.Gupta刚刚把revStr[i]='\0'
return
语句之前。@A.Gupta还请注意,您只需使用算法即可实现所需的功能。实际上,您不需要使用
std::string
来执行此操作。我尝试了此操作,但在设置
revStr[I++]
后,仍会在“tseT”的末尾获得相同的不需要的字符,从而进行递归调用。选中编辑。在返回字符串之前,我们不需要“else”,只需要“revStr[i]='\0';”。
if (*string)
{
     revStr[i++] = *string;
    reverseString(string + 1);
}
else
    revStr[i] = '\0';