我也得到了垃圾输出

I am getting junk output also

本文关键字:输出      更新时间:2023-10-16

我正在尝试使用 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;
}

除了其他人已经指出的缺少NULL终结者之外,这里还有几个问题:

  • 使用已弃用且危险的函数gets

    该函数不提供任何方法来防止目标数组的缓冲区溢出,给定足够长的输入字符串。 std::gets在 C++11 中被弃用,并从 C++14 中删除。

    可以改用std::fgets

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

    char output[str.size()];

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

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