如何使用可变数量的参数调用函数?

5

我该如何使用不同进程的可变参数调用execlp()?


1
如果参数数量在运行时可以变化,为什么不直接使用execvp呢? - CB Bailey
4个回答

10

如果你不知道在编写代码时需要多少参数,你应该使用execvp()而不是execlp():

char **args = malloc((argcount + 1) * sizeof(char *));
args[0] = prog_name;
args[1] = arg1;
...
args[argcount] = NULL;

execvp(args[0], args);

1

这只回答了标题问题

来自维基百科 涵盖新旧风格

#include <stdio.h>
#include <stdarg.h>

void printargs(int arg1, ...) /* print all int type args, finishing with -1 */
{
  va_list ap;
  int i;

  va_start(ap, arg1); 
  for (i = arg1; i != -1; i = va_arg(ap, int))
    printf("%d ", i);
  va_end(ap);
  putchar('\n');
}

int main(void)
{
   printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
   printargs(84, 51, -1);
   printargs(-1);
   printargs(1, -1);
   return 0;
}

0

Execlp已经具有可变数量的参数。您想要做什么?您可以使用可变宏

#define myfind(...) execlp("find", "find", __VA_ARGS__)

这是一个相当无用的例子,但是如果没有更确切地了解您想要做什么,那就是我能想到的全部。


这不是(标准)C99可变宏的语法。为什么还要继续使用它? - Chris Lutz
抱歉,那么语法是什么? - shodanex

0

execlp() 可以使用可变数量的参数进行调用,因此只需调用:

int ret;
ret = execlp("ls", "ls", "-l", (char *)0);
ret = execlp("echo", "echo", "hello", "world", (char *)0);
ret = execlp("man", "man", "execlp", (char *)0);
ret = execlp("grep", "grep", "-l", "pattern", "file1", "file2", (char *)0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接