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

jam*_*o00 3 c gcc function exec system-calls

根据exec引用,对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
Run Code Online (Sandbox Code Playgroud)

谁知道什么是错的?

Pre*_*gha 9

该参考文献说原型是

execl(const char * path, const char * arg, ...)
Run Code Online (Sandbox Code Playgroud)

我读到2个参数+(char*)NULL

就像是 :

execl(cmdFullPath, (const char*)NULL, (char*)NULL);
Run Code Online (Sandbox Code Playgroud)

从页面:

#include <unistd.h>

int main() {
    execl("/bin/ls", "ls", "-l", (char *)NULL);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)