Похоже, у вас возникли проблемы с массивами.Как отметил Брайан, индексы массива начинаются с 0, а не с 1. Таким образом, ваши два strings
равны string_array[0]
и string_array[1]
, , а не string_array[1]
и string_array[2]
.
Также, если ваша функция принимает параметр const char* cstring_array
, то ваша переменная char* cstring_array[2]
, вероятно, не то, что вы хотите.Если бы вы передавали его как есть, вы бы по существу передавали char**
, а не char*
, поскольку вы можете считать имя массива эквивалентным указателю на его первый элемент .
Когда вы представили свой вопрос, вы могли бы сделать что-то вроде следующего (исправление ошибки индексации и допущение, что упомянутая вами функция называется myFunction
):
...
cstring_array[0] = string_array[0].c_str( );
cstring_array[1] = string_array[1].c_str( );
myFunction (cstring_array[0]);
myFunction (cstring_array[1]);
...
Однако более простой эквивалент, который вообще не требует cstring_array
:
...
myFunction (string_array[0].c_str( ));
myFunction (string_array[1].c_str( ));
...
Или, если вы намеревались передать один массив char
, содержащийобе строки (что возможно из моей интерпретации вопроса), тогда вы действительно хотите сказать, что хотите создать единственную строку, представляющую собой конкатенацию ваших исходных двух:
...
std::string str = string_array[0] + string_array[1];
myFunction (str.c_str( ));
...
Надеждаэто помогает!
РЕДАКТИРОВАТЬ: учитывая комментарии, которые появились после того, как я написал это, я бы сказал, что первый пример близок к тому, что вам нужно.Я бы сделал следующее (где N - количество записей в любом массиве):
...
for (int i = 0; i < N; i++)
cstring_array[i] = string_array[i].c_str( );
myFunction (cstring_array);
...
Это единственный возможный подход.Не существует стандартной функции (AFAIK), которая, учитывая массив string
, даст массив char*
.Я подозреваю, что причина в том, что: - Это не то, что нужно делать часто, поэтому мало что для того, чтобы такая функция была широко доступна.- Если бы была такая функция, она, скорее всего, была бы очень похожа на вышеприведенную в любом случае, и в этом случае она настолько тривиальна, что не нужна.
В принципе, чтобы ответить на ваш вопрос, я не думаю, что тамявляется более эффективным методом, и даже если бы существовала стандартная библиотечная функция для этого, он все равно использовал бы этот подход.