没有足够的变量来适应哨兵

时间:2010-09-28 20:28:14

标签: c gcc function exec system-calls

根据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

任何人都知道什么是错的?

3 个答案:

答案 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)