アレイに問題があるようです。ブライアンが指摘したように、配列インデックスは1ではなく0から始まります。したがって、2つはとであり、とで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
配列を渡すことを意図している場合(これは、質問の私の解釈からの可能性です)、本当にやりたいことは、元の文字列を連結した単一の文字列を生成することです。 2:
...
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);
...
これが可能な唯一のアプローチです。string
の配列が与えられると、の配列を与える標準関数(AFAIK)はありませんchar*
。その理由は次のとおりだと思います。-頻繁に行う必要のあることではないため、このような機能を広く利用できるようにする必要はほとんどありません。-そのような機能があったとしたら、とにかく上記と非常によく似ているでしょう。その場合、それは非常に些細なことで不要です。
基本的に、あなたの質問に答えるために、これ以上効率的な方法はないと思います。これを行うための標準ライブラリ関数があったとしても、とにかくこのアプローチを使用します。