字符** nargv是空的,但不知道为什么
问题描述:
我试图做一些很简单:填补字符**与论据我想在execvp呼叫C.字符** nargv是空的,但不知道为什么
使用这是怎么了这样做的:
if(argc >=1)
{
*nargv = "--action";
while(argc--)
{
printf("nargv1 => %s \t argv1 => %s \n", *nargv, *argv);
*++nargv = *argv++;
printf("nargv2 => %s \t argv2 => %s \n", *nargv, *argv);
}
printf("nargv3 => %s \t argv3 => %s \n", *nargv, *argv);
*nargv++ = '\0';
printf("nargv4 => %s \t argv4 => %s \n", *nargv, *argv);
}
输出给我:
nargv1 => --action argv1 => backup
nargv2 => backup argv2 => --help
nargv1 => backup argv1 => --help
nargv2 => --help argv2 => (null)
nargv3 => --help argv3 => (null)
nargv4 => (null) argv4 => (null)
这听起来不错(nargv填写正确,至少这是我认为)>但是当我做execvp( “命令”,nargv)我的论点没有通过。怎么了 ?我试图与gdb一起玩,但没有成功。
问候
答
既然你做++nargv
,你nargv指针最终指向过去的数组的末尾。保留一个指向初始成员的指针并将其传递给exec。此外,*nargv++ = '\0'
看起来像一个错误,因为您将一个字符分配给指向char的指针。
'\ 0'的好处。我会解决这个问题。 对于你的答案的其他部分,你能告诉我一些代码来做到这一点吗?我没有得到它:p thanx – 2010-06-08 15:20:00
它的'像这样 - 如果你以p = top和loop p ++开始,那么在循环结束时p将指向列表的* end *,而不是开始。你需要通过开始,即顶部不是p。 – eemz 2010-06-08 15:36:52
或者,使用数组索引:如果你做* nargv ++,你修改nargv,但是如果你做nargv [i ++],你只修改索引i并且可以将完整的nargv传递给exec。 – 2010-06-08 18:18:24