反转字符串程序中的段错误

Segmentation fault in reversing string program

我正在尝试反转字符串。有人能解释一下为什么这会给我分段错误吗?

#include <iostream>
#include <string>
using namespace std;
int main(){
  string str,rstr;
  int len=str.length(),i=0;
  cin>>str;
  while(str[i]!='[=10=]'){
    rstr[--len]=str[i++];
  }
  rstr[str.length()]='[=10=]';
  cout<<rstr;
  return 0;
}

P.S.: 需要在不使用库函数的情况下逆向

或者只使用反向迭代器

std::string s = "Hello";
std::string r(s.rbegin(), s.rend());

str 只不过是这里声明的字符串:

  int len=str.length(),i=0;

所以你不能str.length()

做类似的事情:

#include <iostream>
#include <string>
using namespace std;
int main(){
  string str,rstr;
  int len,i=0;
  cin>>str;
  len = str.length();
  while(str[i]!='[=11=]'){
   rstr[i++]=str[--len];
  }
  rstr[str.length()]='[=11=]';
  cout<<rstr;
  return 0;
}

如果您想按照自己的方式进行练习,请尝试进行此更改并从那里开始

#include <iostream>
#include <string>
using namespace std;
int main(){
  string str,rstr;
  cin>>str;                  // --- Moved this line up
  rstr = str;                // --- Added this line
  int len=str.length(),i=0;
  while(str[i]!='[=10=]'){
   rstr[--len]=str[i++];
  }
  rstr[str.length()]='[=10=]';
  cout<<rstr;
  return 0;
}