2010-01-21 66 views

回答

9

如果你不知道你有多少參數需要在你編寫代碼的時候,你想用execvp(),而不是execlp():

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

execvp(args[0], args); 
1

這只是回答標題問題

Wikipedia 涵蓋新舊風格

#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()可以與可變數量或變元被稱爲因此,只需撥打電話:

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

Execlp已經作爲可變數量的參數。你想要做什麼? 你也許可以一variadic macro

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

這是一個相當無用的例子,但不知道更多的正是你想做的事,這就是我能想出

+0

這不是(標準)C99可變宏的語法。爲什麼繼續使用它? – 2010-01-21 08:12:49

+0

對不起,這是什麼語法呢? – shodanex 2010-01-21 08:16:16

相關問題