4

ベクトルを execvp の 2 番目の引数として渡したいです。出来ますか?

4

3 に答える 3

8

はい、ベクトルが使用する内部配列を利用することで、かなりきれいに行うことができます。

標準では要素が連続して格納されることが保証されているため、これは機能します ( https://stackoverflow.com/a/2923290/383983を参照) 。

#include <vector>

using namespace std;

int main(void) {
  vector<char *> commandVector;

  // do a push_back for the command, then each of the arguments
  commandVector.push_back("echo");
  commandVector.push_back("testing");
  commandVector.push_back("1");
  commandVector.push_back("2");
  commandVector.push_back("3");  

  // push NULL to the end of the vector (execvp expects NULL as last element)
  commandVector.push_back(NULL);

  // pass the vector's internal array to execvp
  char **command = &commandVector[0];

  int status = execvp(command[0], command);
  return 0;
}
于 2012-04-17T17:37:20.777 に答える
2

直接ではありません。どうにかして、ベクトルを NULL で終わる文字列ポインターの配列として表す必要があります。それが文字列のベクトルである場合、それは簡単です。他の種類のデータの場合は、文字列としてエンコードする方法を理解する必要があります。

于 2011-05-01T06:44:39.940 に答える