字符串:无法在C ++中更改字符串的内容

时间:2017-11-05 06:49:47

标签: c++ string

int main() {
  std::string s;
  const int p = 4;
  s.resize(p);

  for(int i=0;i<p;i++)
    s[i]='a';
  std::cout << s << std::endl;

  for(int i=0,j=p-1; i>=j; i++,j--) {
    if(i%2 == 0){
      s[i]='a';
      s[j]='a';
    } else {
      s[i]='b';
      s[j]='b';
    }
  }
  std::cout << s << std::endl;
}

预期产出:

s="aaaa" // Initially
s="abba" // Expected string after for loop

实际输出:

s="aaaa" // Initially
s="aaaa" // But contents of s is not modified

最初在上面的程序中,字符串s只包含一个&#39; s,然后我尝试根据某些条件更改s的内容。但是内容不会改变。

如果字符串是x =&#34; abc&#34;如果我改变x [1] =&#39; a&#39;,x将被修改为x =&#34; aac&#34;。

为什么我无法更改上述程序中s的内容?

2 个答案:

答案 0 :(得分:1)

使用此代码

    string s;
    for(i=0;i<p;i++)s[i]='a';

您有一个空(大小为0)的字符串并开始分配到结尾之后的元素,这会导致未定义的行为。在您的情况下,结果是一个垃圾字符串。在开始索引之前,您需要将字符串的大小调整为足够大:

    string s;
    s.resize(p);
    for(i=0;i<p;i++)s[i]='a';

答案 1 :(得分:0)

您的for循环条件是向后的。它应该是#include"stdio.h" void func(); // Forward declare func() here. int main() { func(); } void func() // Ensure func() has a return type 'void' { printf("This program uses a function."); }