Программа имеет неопределенное поведение, потому что вы не можете использовать оператор индекса для присвоения значений пустой строке.
Также назначение нулевого символа является избыточным.
x[2]='\0';
Запускиз C ++ 11 завершающий ноль автоматически добавляется к объектам типа std::string
. Например, этот фрагмент кода
string x;
std::cout << static_cast<int>( x[x.size()] ) << '\n';
действителен и будет выведен 0
.
Вы можете написать вместо
string x;
x += 'a'; // it is the same as x.push_back( 'a' );
x += 'c';
cout<<x<<endl;
Или вы можете просто инициализировать строкунапример
string x = { 'a', 'c' };
или используйте присваивание
string x;
x = { 'a', 'c' };
Если вы хотите использовать оператор индекса, вам нужно создать строку с необходимым количеством элементов, например
string x( 2, ' ' );
x[0] = 'a';
x[1] = 'c';
cout<<x<<endl;