为什么我不能在C ++中写入字符串的第0个元素?

时间:2016-10-19 05:58:51

标签: c++ string

这是一个发出“”

的代码
#include<iostream>
#include<string>

using namespace std;

int main()
{
    string k= "";
    k[0] = 'k';
    cout << k;
    return 0;
}

2 个答案:

答案 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