C - 将va_list传递给以sentinel终止的函数 - 需要execlp()的包装器

时间:2011-07-28 17:35:02

标签: c wrapper variadic-functions variadic ellipsis

我正在尝试为execlp()编写一个包装器。 为什么这不起作用?它是哨兵吗?

int vExeclp(const char *file, const char *arg, va_list argptr)
{
  int returnValue = 0;

  returnValue = execlp(file, arg, argptr, NULL);

  // error handling if returnValue == -1

  return(returnValue);
}


int Execlp(const char *file, const char *arg, ...)
{
    int returnValue = 0;
    va_list argptr;

    va_start(argptr, arg);

    returnValue = vExeclp(file, arg, argptr);

    va_end(argptr);

    return(returnValue);
}

提前感谢您的任何答案!

2 个答案:

答案 0 :(得分:3)

execlpvariadic function所以you can not create a wrapper。您需要调用execvp传递通过迭代va_list创建的数组字符串。

答案 1 :(得分:1)

您无法将va_list传递给可变参数函数;它根本不起作用。你唯一能做的就是自己将参数列表读入一个数组,直到你到达null终止符,然后将数组传递给execvp