问题:字符串覆盖另一个字符串

时间:2019-02-26 22:33:44

标签: c++ string memory memory-management

我正在尝试使用以下代码处理两个字符串。结果工作得很好,但是每当我尝试对第二个字符串执行相同的操作时,第一个字符串都会被第二个字符串的值覆盖。例如,如果第一个字符串=“ fuhg”,第二个字符串等于=“ abc”,则第一个字符串变为:“ abcg”。 它可能与内存分配或类似的东西有关,但由于在该领域我不是很好,所以我无法弄清楚。

string newPassChar;
string newBloom=bloomFilter(newPass); 
int index=0;
for ( int k =0 ; k < alpha.length() ; k++ )
{
    if (newBloom[k]=='1')
      { 
        newPassChar[index]=alpha[k];
      index++;
      }
}

1 个答案:

答案 0 :(得分:1)

来自http://www.unofficialgoogledatascience.com/2017/07/fitting-bayesian-structural-time-series.html

No bounds checking is performed. If pos > size(), the behavior is undefined.

来自cppreference std::basic_string::operator[]

1) Default constructor. Constructs empty string (zero size and unspecified capacity).

所以:

string newPassChar;

使用size() == 0创建新字符串。

然后:

newPassChar[0] = ...

将覆盖字符串中的空字符。但是在下一次迭代中,当index = 1时,则:

newPassChar[1] = ....

它是cppreference std::basic_string construcor。并产生恶魔。

我认为您想在阅读字符时“推回”这些字符:

        newPassChar.push_back(alpha[k]);

无需存储用于索引字符串的另一个“索引”变量,它知道字符串对象本身的大小,可以在size()方法中使用它。