Вы можете использовать алгоритм STL std::transform()
, чтобы сделать поэлементную копию вашей строки C.
Функция преобразования будет эффективно преобразовывать каждый volatile const char
в char
- преобразование, которое работает без const_cast
. Используя std::back_inserter()
, вы можете добавить полученные символы в конец вашего std::string
.
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
volatile const char* cstr = "hello";
std::size_t len = 6; // your string's length
// this implicitly converts 'volatile const char' argument to 'char' parameter
auto func = [] (char c) { return c; };
std::string str;
std::transform(cstr, cstr + len, std::back_inserter(str), func);
std::cout << "string=" << str << ".\n"; // outputs: string=hello.
}
Обратите внимание, что вы не можете использовать std::strlen()
по той же причине - если у вас нетразмер, вам нужно написать свой цикл для его расчета.