c++ - std::string resize 正在破坏比较运算符 (==)

标签 c++ string compare

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/

相关文章:

c++ - 在 MFC 中绘制后更新显示

ruby - 在 Ruby 中,如何比较两个数组以确保第一个数组中的每个对象都存在于第二个数组中?

c - 比较功能如何工作?

c++ - 如何模拟可变参数函数中的折叠表达式?

c++ - Qt DBus连接不适用于SLOT参数中的typedef

regex - 使正则表达式更具体以排除某些字符的修改

string - Lua前沿模式匹配(全词搜索)

java - 将对象的 int 变量与 String 进行比较

c++ - 警告 C5029 是否仅指示正在使用 Microsoft 扩展?

Java,计算字符串中唯一字符之间的差异