我也收到垃圾输出

时间:2019-04-06 07:25:09

标签: c++ c++11 codeblocks

我正在尝试使用Reverse函数来反转字符串。如果我将输出数组的大小设置为10并给出10个值作为输入,我会给出理想的输出。但是,如果我使用str.size()初始化输出数组的大小,它也会给出一些垃圾值。

#include<iostream>
#include<string>

using namespace std;

string Reverse(string str)
{
    cout<<str.size()<<endl;
    char output[str.size()];

    int temp = 0;
    for(int i = str.length()-1 ; i >= 0 ; i--)
    {
        output[temp] = str[i];
        temp++;
    }
    return output;
}

int main()
{
    char st[100];
    cout<<Reverse(gets(st));

    return 0;
}

1 个答案:

答案 0 :(得分:1)

除了其他人已经指出的NULL终止符之外,这里还有其他一些问题:

  • 使用了已弃用且危险的功能gets

      

    在给定足够长的输入字符串的情况下,该函数无法防止目标数组的缓冲区溢出。 std::gets在C ++ 11中已弃用,并从C ++ 14中删除。

         

    std::fgets可以代替。

  • Reverse函数中使用可变长度数组(可以是编译器扩展),这是标准C ++不支持的功能。

      

    char output[str.size()];

由于您已经在程序中使用std::string,因此也可以将其用于output变量,这样可以解决NULL终止问题。

如果不阻止您使用标准库算法,则可以使用std::reverse代替Reverse函数。