Есть невероятно простой код:
#include <iostream>
#include <string>
int main()
{
const char* s1 = "A";
const char* s2 = "B";
std::string s{s1, s2};
std::cout << s << std::endl;
}
Компилируется "на ура". Но вот при его выполнении начинаются странности. Я ожидаю получить переменной s
строку "AB"
, но вместо этого получаю "A"
. Более того, если при создании строки я поменяю местами параметры, т.е. напишу
std::string s{s2, s1};
то приложение вообще падает. И это происходит на двух компиляторах - MinGW 7.3.0 x64 и MSVC2017.
Ошибка при выполнении второго варианта (MinGW):
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Ошибка, выдаваемая MSVC2017 маловразумительная.
Уважаемые гуру программирования! Объясните, пожалуйста, почему такое происходит? Вероятно, я делаю что-то неправильно, но что именно? Заранее спасибо за ответ.
У std::string нет конструктора, принимающего набор си-строк. А именно так ты и пытаешься сделать.
Если тебе нужно создать строку из двух символов, то:
char s1 = 'A';
char s2 = 'B';
std::string s{s1, s2};
Если тебе нужно создать новую строку из конкатенации двух строк, то что-то типа:
const char* s1 = "A";
const char* s2 = "B";
std::string s = std::string("A") + std::string("B");
Потому-что ты объявил 2 строки а как мы знаем на конце каждой строки есть терминирующий ноль \0
он появляется неявно поэтому стоит использовать конкатенацию строк
#include <iostream>
#include <string>
int main()
{
const char* s1 = "A";
const char* s2 = "B";
std::string s = s1;
s += s2;
std::cout << s << std::endl;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Где найти файл лога Win с информацией о, например, кол-ве удалённых папок или файлов? Ну, не само количество, а, допустим, просто инфу о том, какие...
Добрый вечерПишу код программы, которая должна иметь функции ввода и вывода массива типа структуры AEROFLOT