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