Похоже, у вас проблемы с массивами. Как отметил Брайан, индексы массива начинаются с 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());
...
Надежда, что помогает !
EDIT: учитывая комментарии, появившиеся с тех пор, как я написал это, я бы сказал, что первый пример близок к тому, что вам нужно. Я бы сделал следующее (где N - количество записей в любом массиве):
...
for (int i = 0; i < N; i++)
cstring_array[i] = string_array[i].c_str();
myFunction (cstring_array);
...
Это единственный возможный подход. Нет стандартной функции (AFAIK), которая, учитывая массив string
, даст массив char*
. Я подозреваю, что причины таковы: - Это не то, что нужно делать часто, поэтому мало нужно, чтобы такая функция была широко доступна. - Если бы была такая функция, она, скорее всего, была бы очень похожа на вышесказанное в любом случае, и в этом случае это настолько тривиально, что не нужно.
В принципе, чтобы ответить на ваш вопрос, я не думаю, что есть более эффективный метод, и даже если бы была стандартная функция библиотеки для этого, он все равно использовал бы этот подход.
Индексы 0 основаны на C++. Итак, вы имеете в виду 'string_array [0]' и 'string_array [1]' –
Да, конечно, спасибо – hoxnox
Как функция использует const char * cstring_array []? –