Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何调用参数数目可变的函数?_C_Function_Variadic Functions_Argument Passing - Fatal编程技术网

C 如何调用参数数目可变的函数?

C 如何调用参数数目可变的函数?,c,function,variadic-functions,argument-passing,C,Function,Variadic Functions,Argument Passing,如何使用不同进程的可变数量的参数调用execlp()。如果您不知道编写代码时需要多少参数,您希望使用execvp(),而不是execlp(): 这只回答了标题问题 从 涵盖新旧款式 #include <stdio.h> #include <stdarg.h> void printargs(int arg1, ...) /* print all int type args, finishing with -1 */ { va_list ap; int i;

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

如果您不知道编写代码时需要多少参数,您希望使用execvp(),而不是execlp():


这只回答了标题问题

从 涵盖新旧款式

#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;
}
#包括
#包括
void printargs(int arg1,…)/*打印所有int类型args,以-1结尾*/
{
va_列表ap;
int i;
va_启动(ap,arg1);
对于(i=arg1;i!=-1;i=va_arg(ap,int))
printf(“%d”,i);
va_端(ap);
putchar('\n');
}
内部主(空)
{
printargs(5,2,14,84,97,15,24,48,-1);
printargs(84,51,-1);
printargs(-1);
printargs(1,-1);
返回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);

Execlp已作为可变数量的参数存在。你到底想做什么? 您可能会:


这是一个相当无用的示例,但如果不知道您想要做什么,我只能想到这些

如果参数的数量在运行时可能会变化,为什么不使用
execvp
?这不是(标准)C99可变宏的语法。为什么还要继续使用它?对不起,语法是什么?
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);
#define myfind(...) execlp("find", "find", __VA_ARGS__)