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

use*_*567 -5 c++ string

这是一个发出""的代码

#include<iostream>
#include<string>

using namespace std;

int main()
{
    string k= "";
    k[0] = 'k';
    cout << k;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

krz*_*zaq 6

k有0个元素.你正在访问它的第一个元素.分配给它会产生未定义的行为.

您可以通过使用不同的大小初始化来更改它,即:

string k = " ";
k[0] = 'k'; // ok
Run Code Online (Sandbox Code Playgroud)

要么

string k(1, 0);
k[0] = 'k'; // ok
Run Code Online (Sandbox Code Playgroud)

或者你可以追加角色:

k.push_back('k');
Run Code Online (Sandbox Code Playgroud)

还有at()执行边界检查的方法.如果你使用无效索引(即k.at(0) = 'k'在你的例子中)调用它,它就会抛出std::out_of_range.

  • 实际上它确实如此.但就*接口*而言 - 它是空的. (4认同)
  • @jtbandes你知道这是一个C++问题吗?该字符串的大小恰好为0. (2认同)