修改字符串的长度和内容?

时间:2015-08-16 08:44:25

标签: c++ string

要更改函数中字符串的内容,使其在main函数中反映,我们需要接受字符串作为参考,如下所示。

Changing contents of a std::string with a function

  

但是在上面的代码中,我们也在改变字符串的大小(即,比它能容纳的更多),那么为什么程序不会崩溃呢?

将十进制转换为二进制的程序,请注意,代码不完整,我只是测试代码的第一部分。

void dectobin(string & bin, int n)
{

  int i=0;

  while(n!=0)
  {

     bin[i++]= (n % 2) + '0';
     n = n / 2;
   }

  cout << i << endl;

  cout << bin.size() << endl;

  cout << bin << endl;
}

int main()
{
   string s = "1";
   dectobin(s,55);
   cout << s << endl;
   return 0;
}
  

O / p:6 1 1并且程序在代码块中崩溃。虽然链接中的上述代码完全正常。

     

当我用6个字符初始化main中的字符串时(即从十进制转换为二进制后的数字长度),它只输出正确的结果。

http://www.cplusplus.com/reference/string/string/capacity/

  

请注意,此容量不会限制字符串的长度。当此容量耗尽且需要更多容量时,它将由对象自动扩展(重新分配存储空间)。字符串长度的理论限制由成员max_size

给出

如果字符串自动调整大小,那么为什么我们需要resize函数呢?为什么我的十进制到二进制代码不起作用?

1 个答案:

答案 0 :(得分:1)

关于std::string

,请查看link
      char& operator[] (size_t pos); 
const char& operator[] (size_t pos) const;
     

如果pos不大于字符串长度,则函数永远不会   抛出异常(无抛出保证)。否则,它会导致   未定义的行为

while循环中,您正在访问索引大于bin的{​​{1}}字符串