我有一个数组args
定义如下:
char *args[MAX_LINE/+1]; /* MAX_LINE = 80 */
我想将args[0]
传递给execvp
,并将数组的其余部分作为第二个参数传递:
execvp(args[0], args[1-x]);
我尝试了多种东西。即:
execvp(args[0], args+MAX_LINE); /* args+MAX_LINE should point to the second element of the array (?) */
并编写一个额外的函数,通过将所有元素向左移动来删除数组的第一个元素:
void getOpts(char *opts[])
{
int i = 0; /* index used in the for loop */
for(i=0;opts[i] != NULL;i++)
opts[i] = opts[i+1];
}
此解决方案有效但部分有效。问题是第二个元素有时可能是NULL
。并且在调用execvp
时系统会返回错误。
有没有一种简单的方法可以将第二个元素索引到数组的末尾?
答案 0 :(得分:1)
现在,args
是一个衰减到指向数组第一个元素的指针的数组,因此args+1
指向第二个元素。所以你的代码应该是:
execvp(args[0], args+1);