我尝试了两种方法:
void func(const char *path, const char *arg0, ...){
va_list args;
va_start(args, arg0);
execl(path, arg0, args, NULL);
va_end(args);
}
func("/bin/ls", "ls");
和
void func(const char *path, const char *arg0, ...){
va_list args;
va_start(args, arg0);
execl(path, arg0, args);
va_end(args);
}
func("/bin/ls", "ls", NULL);
但经过几次测试后似乎无法正常工作......
我的包装可变长度参数的方式有什么问题?
答案 0 :(得分:4)
由于您不知道您将收到多少参数,因此您需要/想要使用execv
而不是execl
。您需要遍历参数,检索指向每个字符串开头的指针,并将它们放入数组中。然后,您将该数组的地址传递给execv
。
答案 1 :(得分:0)
execl()
是一个可变函数,所以这应该编译。
但是,它不起作用。 execl
期望它的每个参数都是const char *
,即指向字符串的指针。 va_list
不是这样的。