- 此问题在此处已有答案**:
(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')
1条答案
按热度按时间0md85ypi1#
调用方法
clear
后访问字符串的元素会调用未定义的行为。在您的示例中,类
std::string
似乎使用类本身定义的内部缓冲区来存储短字符串。调用
clear
之后,该类只使用终止零字符'\0;
设置缓冲区的第一个字符。要检查字符串是否已清除,只需输出其长度,例如