c++ string.clear()无法正确移除元素[重复]

bvjveswy  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(178)
    • 此问题在此处已有答案**:

(9个答案)
3天前关闭。
看起来string的成员函数clear()确实删除了它的内容,但是被删除的内容operator[]仍然可以访问,下面是一个让我困惑的例子。

#include <iostream>
using namespace std;
int main()
{
    string input = "Weird";
    cout << "Your Input: " << input << "\n";
    input.clear();
    cout << "Your Input: " << input << "\n";
    cout << "Your Input: " << input[0] << input[1] << input[2] << input[3] << input[4] << '\n';
    return 0;
}

结果如下:

Your Input: Weird
Your Input:
Your Input: eird

为什么会发生这种情况?如果上面的例子是正常的,我应该做什么来完全删除它的内容?(通过输入[1]访问应该是'\000')

0md85ypi

0md85ypi1#

调用方法clear后访问字符串的元素会调用未定义的行为。
在您的示例中,类std::string似乎使用类本身定义的内部缓冲区来存储短字符串。
调用clear之后,该类只使用终止零字符'\0;设置缓冲区的第一个字符。
要检查字符串是否已清除,只需输出其长度,例如

std::cout << input.length() << '\n';

相关问题