我正在尝试使用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;
}
答案 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
函数。