根据exec reference,对exec(或一般的堆栈检查vararg函数)的调用在参数列表的末尾需要(char*)NULL
aka 0。但是,海湾合作委员会抱怨以下代码
char cmdFullPath[4096]; //yes this 4096 thing is bad coding practice
...
execl(cmdFullPath, (char*)NULL);
//warning: not enough variable arguments to fit a sentinel
任何人都知道什么是错的?
答案 0 :(得分:9)
该引用说原型是
execl(const char * path, const char * arg, ...)
我读到2个参数+(char *)NULL
类似的东西:
execl(cmdFullPath, (const char*)NULL, (char*)NULL);
来自页面:
#include <unistd.h>
int main() {
execl("/bin/ls", "ls", "-l", (char *)NULL);
return 0;
}
答案 1 :(得分:2)
通常将可执行文件名作为第一个参数传递给
因此,如果您正在执行的可执行文件是“/ bin / ls”(根据您发布的链接),那么第一个参数是“ls”,然后您将其作为最后一个传递(char *)NULL(即在这种情况下,第3个参数。
答案 2 :(得分:0)
你必须传递至少三个参数。第二个是argv [0],因此它不能为空。
execl(cmdFullPath, "", NULL)