std::string resize 导致看似相等的字符串不再相等。当我将鼠标悬停在调试器中的变量上并且它们似乎具有相同的值时,这似乎会产生误导。
我认为这归结为我希望 == 运算符在第一个空字符处停止,但它一直持续到大小结束。我确信这是按预期工作的,但我被困在由此引起的问题上有一段时间了,所以我想看看为什么你会在第一个空字符之后继续比较字符。谢谢!
int main(void)
{
std::string test1;
test1.resize(10);
test1[0] = 'a';
std::string test2 = "a";
//they are not equal
bool same = (test1 == test2);
return 0;
}
最佳答案
test1
是字符串 "a\0\0\0\0\0\0\0\0\0"
。 test2
是字符串"a"
。它们不相等。
std::string
可以包含空字符。它的长度不是到第一个空字符的距离。它还保证包含字符串字符的内存缓冲区以超出其长度的附加空字符 1 结尾。
如果您不打算让字符串更长而只是想要内存,请使用 std::string::reserve
。请注意,您不能使用 []
合法地访问末尾以外的元素,但是在您超过保留限制之前,向后推或其他任何操作都不会导致任何新的内存分配。
关于c++ - std::string resize 正在破坏比较运算符 (==),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659005/