2013-07-10 2 views
0

У меня есть функция, которая принимает const ** char как параметр функции. Вход, который я должен назвать этой функцией, - это строка, которую мне нужно преобразовать в const char **, где каждая строка будет единственным символом строки.C++ convert 2 size char array const char **

"строка" => { "с", "т", "г", "I", "н", "г"}

Я был в состоянии создать символ * * с приведенными выше данными, но преобразовывая его в const char **, я не мог этого сделать. Компилятор явно дал ошибку. Затем я создал двумерный символ массива char input [string.size()] [2]. Но с этим я теряюсь на том, как преобразовать его в const char **

UPDATE: Это то, что я искал - (const char **) temp, где temp is char [size] [2]

ответ

0

Вы можете попытаться использовать const_cast тип указателя.

int main(int ac, char **av) 
{ 
const char **const_av = const_cast<const char **>(av); 

return 0; 
} 
0

Если я правильно понимаю, у вас есть char** (производный от char *[]?), И вы хотите назначить ему char const** или использовать его для инициализации char**. Это незаконно, так как это было бы перерыв Const:

char const s[] = "abc"; 
char const** p = s; 
char** q = p;   // illegal without const_cast 
char* ps = *q;   // because it allows this 
*ps = 'x'; 

Вы должны спросить себя, что на самом деле константные здесь. Если вы дело с строковых литералов, а не:

char* s[] = { "abc", "123", "xyz" }; 

вы можете:

char const* s[] = { "abc", "123", "xyz" }; 

или даже:

char const* const s[] = { "abc", "123", "xyz" }; 

В качестве альтернативы, возможно, функция должна принимать char const* const* (если он ничего не изменяет). A char** будет конвертировать в это неявно.

Наконец, если это наследие функция, подпись которого вы не может изменить, но на самом деле не изменить что-либо, вы можете использовать const_cast, чтобы заставить компилятор принять его.

+0

Я не могу изменить подпись. Но это делало то, что я искал - (const char **) temp, где temp - char [size] [2] – Jithin