这是一个发出“”
的代码#include<iostream>
#include<string>
using namespace std;
int main()
{
string k= "";
k[0] = 'k';
cout << k;
return 0;
}
答案 0 :(得分:6)
您的k
有0个元素。你正在访问它的第一个元素。分配给它会产生未定义的行为。
您可以通过使用不同大小初始化来更改它,例如:
string k = " ";
k[0] = 'k'; // ok
或
string k(1, 0);
k[0] = 'k'; // ok
或者您可以追加角色:
k.push_back('k');
还有方法at()
执行边界检查。如果您使用无效索引(例如示例中的k.at(0) = 'k'
)调用它,则会抛出std::out_of_range
。
答案 1 :(得分:2)
string k = "";
表示您的字符串k
为空,大小为0。
您可以使用k.empty()
验证这一点。
这相当于,
bool empty() const { return this->size() == 0; }
所以,你要做的是,访问空字符串的第一个元素,它将产生未定义的行为。该链接讲述了超出范围索引的未定义行为。但不是string
。