5

関数内で使用する昔ながらの引数ベクトル (argv) を準備したい

int execve(const char *filename, char *const argv[],char *const envp[]);

stl::vector クラスで試しました:

std::string arguments = std::string("arg1");    
std::vector<char*> argv; 
char argument[128];
strcpy(argument, arguments.c_str());
argv.push_back(argument); 
argv.push_back('\0'); // finish argv with zero

最後にベクトルを execve() に渡します

execve("bashscriptXY", &argv[0], NULL)

コードはコンパイルされますが、ArgV は execve() によって「無視」されます。だから、私がしようとしていることは間違っているようです。c++ で効率的な方法で argV を構築するにはどうすればよいですか?

4

4 に答える 4

5

char[128] は、文字列 local の有効期間が同じであるため、冗長であると思います。また、rossoft が回答で述べたように、プログラムを argv[0] として追加してみてください。

const std::string arguments("arg1");    
std::vector<const char*> argv;

argv.push_back("bashscriptXY");
// The string will live as long as a locally allocated char*
argv.push_back(arguments.c_str()); 
argv.push_back(NULL); // finish argv with zero

execve(argv[0], &argv[0], NULL);
于 2009-11-05T20:34:51.080 に答える