2016-12-06 8 views
-5

У меня есть следующий код, в котором работает нормально.convert const char ** to const char *

const char** array = new const char*[_list.size()]; 
unsigned index = 0; 
for (std::list<std::string>::const_iterator it = _list.begin(); it != _list.end(); ++it) { 
    array[index] = it->c_str(); 
    index++; 
} 

Вопрос в том, как преобразовать const char ** в const char *. Пожалуйста помоги.

+0

Вы не можете изменить значение 'const' – user463035818

+0

* Исправлены некоторые ошибки *. – SergeyA

+0

Подождите, вы хотите преобразовать список нескольких строк в одну C-строку? –

ответ

-1

Это на самом деле вопрос XY. Хеймид должен сказать, в чем проблема, которую он решает, а не то, что он должен был закончить, чтобы решить проблему. На самом деле задача? Преобразовать список строк в массив строк c? если да, то должно быть сделано несколько таким образом (к сожалению, нужно скопировать данные)

char** arr = new char*[_list.size()]; 
int i = 0; 
for(auto it = _list.begin(); it != _list.end(); ++it, +i) 
{ 
    const char *s = it->c_str(); // should not be modified or deleted 
    const size_t l = strlen(s); 
    arr[i] = new char [l+1]; 
    std::copy(&s[0],&s[l], &(arr[i][0])); 
} 

...

ли вам нужно получить я-й элемент из списка?

auto it = _list.begin(); 
std::advance(it, i); 
const char *a = it->c_str(); 

если вы делаете это в цикле для каждого элемента, просто увеличивайте его.

конкатенировать все строки в одном? перебирать список, вычислять общую длину, затем выделять массив символов этой длины и копировать строку один за другим. У меня есть неопределенная память, что повышение получило это как алгоритм :: join уже, но stl требует длинный и фрилли код, не может разработать, что на телефоне, тот, кто может редактировать ответ, приветствуется. в различной форме этот вопрос с десятком решений представлен на стеке: How to implode a vector of strings into a string (the elegant way)