gpt4 book ai didi

c++ - 问题 : String writes over another string

转载 作者:行者123 更新时间:2023-11-28 04:23:50 25 4
gpt4 key购买 nike

我正在尝试使用以下代码处理两个字符串。结果工作得很好,但每当我尝试对第二个字符串执行相同的操作时,第一个字符串就会被第二个字符串的值覆盖。例如,如果第一个字符串 = "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++;
}
}

最佳答案

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

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

来自 cppreference std::basic_string construcor :

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

所以:

string newPassChar;

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

然后:

newPassChar[0] = ...

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

newPassChar[1] = ....

undefined behavior .并产生恶魔。

我想你想在阅读时“推回”字符:

        newPassChar.push_back(alpha[k]);

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

关于c++ - 问题 : String writes over another string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com