Это не имеет ничего общего с векторами.
Вы создаете временных std::string
объектов, получаете указатели на их базовые данные и пытаетесь использовать эти указатели после того, как строки больше не существуют . Это не разрешено.
(Кроме того, подача '* x' в std :: cout, где 'x' - это символьная константа *, будет печатать только первый символ C-строки.)
Просто сохраните строки в векторах. Вот как вы должны их использовать. .c_str()
действительно существует только для того, чтобы вы могли работать с унаследованным кодом C.