我正在尝试做一些非常简单的事情:在一个字符**中填入我想在C中的execvp调用中使用的参数。
我就是这样做的:
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(“command”,nargv)时,我的参数不会被传递。怎么了?我试过和gdb一起玩,但没有成功。
当做
最佳答案
因为您确实++nargv
,所以nargv指针最终指向数组的末尾。保留指向初始成员的指针并将其传递给exec。而且,*nargv++ = '\0'
看起来像一个bug,因为您将一个char分配给一个指向char的指针。
关于c - char ** nargv为空,但不知道为什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2998580/