我如何在exe中包装execl

时间:2011-09-21 15:20:50

标签: c

我尝试了两种方法:

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);

但经过几次测试后似乎无法正常工作......

我的包装可变长度参数的方式有什么问题?

2 个答案:

答案 0 :(得分:4)

由于您不知道您将收到多少参数,因此您需要/想要使用execv而不是execl。您需要遍历参数,检索指向每个字符串开头的指针,并将它们放入数组中。然后,您将该数组的地址传递给execv

答案 1 :(得分:0)

execl()是一个可变函数,所以这应该编译。

但是,它不起作用。 execl期望它的每个参数都是const char *,即指向字符串的指针。 va_list不是这样的。