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

发布于 2024-11-27 02:43:21 字数 522 浏览 1 评论 0原文

我正在尝试为 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);
}

预先感谢您的任何答复!

I am trying to write a wrapper for execlp().
Why doesn't this work? Is it the sentinel?

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

Thanks in advance for any answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你丑哭了我 2024-12-04 02:43:21

execlp 是一个 变量函数所以你可以不为其创建包装器。您需要调用 execvp 并传递通过迭代 va_list 创建的数组字符串。

execlp is a variadic function so you can not create a wrapper for it. You will need to call execvp passing an of array strings created by iterating over your va_list.

从来不烧饼 2024-12-04 02:43:21

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

You cannot pass a va_list to a variadic function; it simply does not work that way. The only thing you can do is read the argument list into an array yourself until you get to the null terminator, then pass the array to execvp.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文