【发布时间】:2016-10-01 04:29:52
【问题描述】:
我正在尝试编写一个读取输入然后反转字符串的程序。 所以我可能会输入“racecars”,它应该将它反转为“sracecar”。我不确定为什么会出现分段错误。我的调试器也不清楚我的段错误在哪里。我在 vim 中使用 gdb 调试器。
我怎样才能让我的程序在翻转功能中反向输入。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string turnaround(string &input);
int main(){
cout << "enter some string to reverso" << endl;
string input;
getline(cin,input);
turnaround(input);
//cout << "your input is " << input << endl;
return 0;
}
string turnaround (string & input){
input = string(input.rbegin(), input.rend());
}
【问题讨论】:
-
你的程序表现出未定义的行为,通过退出非空函数而不遇到
return语句。 -
turnaround 不返回任何东西!你是如何编译你的代码的?
-
由于
turnaround()正在修改input,要么让它返回void,要么在末尾添加return input语句。无论哪种方式,这都将避免与函数“落下”相关的未定义行为。此外,打开编译器警告 - 如果配置得当,大多数编译器都会在非void函数结束时发出警告。 -
FWIW,使用 g++(5.3,0 版)编译时程序运行良好,但使用 clang++(Apple LLVM 5.1 版)编译时会出现段错误。
标签: c++ string function segmentation-fault