如何在 C 语言中使用带有用户输入参数的 execl() 函数?
我可以用 来做execv(args[0],args)
。如何将 execv() 转换为 execl() ?
谢谢。
答案1
execv
并execl
做完全相同的事情,不同之处在于它execl
旨在用于您提前知道命令行参数的数量,而execv
允许动态确定参数的数量。
更通用的函数是execv
;execl
当知道参数的数量时,它是一种简写,允许程序员避免构造数组argv[]
。
无论如何,要回答这个问题:你必须事先知道最大限度传递给程序的参数数量exec
。如果您知道参数的最大数量,那么您可以提前准备一个调用来execl
展开参数数组。
假设您有:
char * exec_argv [21];
char * exec_pathname;
对于参数数组的任何合法内容,以下两个调用都是等效的exec_argv[]
:
execv (exec_pathname, exec_argv);
execl (exec_pathname,
exec_argv [0], exec_argv [1], exec_argv [2], exec_argv [3],
exec_argv [4], exec_argv [5], exec_argv [6], exec_argv [7],
exec_argv [8], exec_argv [9], exec_argv [10], exec_argv [11],
exec_argv [12], exec_argv [13], exec_argv [14], exec_argv [15],
exec_argv [16], exec_argv [17], exec_argv [18], exec_argv [19],
NULL
);
(的最后一个参数execl
是NULL
而不是exec_argv[20]
因为gcc
如果使用调用则会查找它-Wall
;因为那里必须NULL
在其中的某个地方不会exec_args[]
对两个函数调用的效果产生任何影响。