Это:
vnames.assign(names.cbegin(), names.cend());//OK
Ваш комментарий говорит "ОК", но это не ОК.Вы не можете присвоить std::string
объектам const char*
объектам.Если вы хотите получить строковые указатели C каждого std::string
и поместить их в vnames
, то вам необходимо:
for (const auto& i : names) {
vnames.push_back(i.c_str());
}
После этого вам нужно быть очень осторожным, чтобы не изменять names
вектор любым способом, который вызовет перераспределение.Это сделает недействительными указатели, хранящиеся в vnames
.