2017-09-05 4 views
-3

私はexeclにプッシュしたいvector<string>を(すべてのstd)持っているので、私のベクトルの各メンバーはchar*として渡されます。これは可能なのか、もしそうなら、私はどのように達成するのですか?ベクトルをvarargsに入れよう

+1

こんにちは! [ask]と[mcve]の作成方法をご覧ください。これまでに何を試しましたか? – msanford

+0

'char const *'のベクトルに変換し、代わりに 'execv'を使います。 –

答えて

0

いいえ、可能ではありませんが、代わりにexecvを使用できます。 execvVエクター(実際Cアレイ)かかり、一方execlは、可変長Lを引数の ISTをとります。ただし、std::vector<std::string>から文字列のC配列(char **)に変換する必要があります。またexecvには、NULLで終了する配列が必要です。つまり、配列の最後の要素はNULLポインタである必要があります。しかし、このようなものは動作するはずです:

int exec_my_vector(std::string path, std::vector<std::string> v) 
{ 
    const char *cv[v.size() + 1]; 
    unsigned i; 
    for(i = 0; i < v.size(); i++) 
     cv[i] = v[i].c_str(); 
    cv[i] = NULL; 
    return execv(path.c_str(), (char * const *)cv); 
} 

(免責事項:。そこに必要はありませんexecvコールの最後に恐ろしいキャストだが、私はそれを回避する方法を把握することはできません)

+1

また、ポインタ自体のベクトルより多くの記憶域を変換する必要はありません。これは元のベクトルの各要素に対して 'c_str()'を呼び出すことで生成できます。 – StoryTeller

関連する問題