C++ Can';t运行execv

C++ Can';t运行execv,c++,linux,execv,C++,Linux,Execv,我一直在尝试使用exevp运行命令,如下所示: char *args[11]; args[0] = (char*)lgulppath.c_str(); args[1] = (char*)"-i"; args[2] = (char*)sniffer_interface.c_str(); args[3] = (char*)"-r"; args[4] = (char*)pcapfileLimit.c_str(); args[5] = (char*)"-C"; args[6] = (char*)"1";

我一直在尝试使用exevp运行命令,如下所示:

char *args[11];
args[0] = (char*)lgulppath.c_str();
args[1] = (char*)"-i";
args[2] = (char*)sniffer_interface.c_str();
args[3] = (char*)"-r";
args[4] = (char*)pcapfileLimit.c_str();
args[5] = (char*)"-C";
args[6] = (char*)"1";
args[7] = (char*)"-f";
args[8] = (char*)serverip_filter.c_str();
args[9] = (char*)"-o";
args[10] = (char*)lpipepath.c_str();
execv("/usr/sbin/program",args);
这很有效。但是,当我想将第一个参数“/usr/sbin/program”作为参数时,可以说:

string str = "/usr/sbin/program";
//char* args is assigned as above
execv(str.c_str(),args);
此操作失败并返回-1。我不明白为什么


谢谢大家

Null终止传递给execv的参数。差不多

char *args[12];
// other args..
args[11] = (char*) 0;

首先,传递给
execv
的参数数组应以指向
NULL
的条目终止。其次,当您收到错误时,您可以检查原因(使用或获取/打印可读的描述)。您似乎无法在args数组的末尾设置NULL。这可能会引起各种各样的麻烦--可能是也可能不是您的特殊问题,但最好先解决它。@Duck..我不认为问题是args..毕竟它在第一次尝试中也会失败..对吗?@user1432779不正确终止参数数组将导致未定义的行为,这意味着任何事情都可能发生:它可能会起作用;它可能不起作用;或者它可能会崩溃。