I want to pass a vector in as the second argument to execvp. Is it possible?
See Question&Answers more detail:osI want to pass a vector in as the second argument to execvp. Is it possible?
See Question&Answers more detail:osYes, it can be done pretty cleanly by taking advantage of the internal array that vectors use.
This will work, since the standard guarantees its elements are stored contiguously (see 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;
}