我正在尝试做一些非常简单的事情:用C中的execvp调用中的参数填充char**.
这就是我在做的事情:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出给了我:
nargv1 => --action argv1 => backup
nargv2 => backup argv2 => --help
nargv1 => backup argv1 => --help
nargv2 => --help argv2 => (null)
nargv3 => --help argv3 => (null)
nargv4 => (null) argv4 => (null)
Run Code Online (Sandbox Code Playgroud)
听起来不错(nargv填写正确,至少这是我的想法)>但是当我执行execvp("命令",nargv)时,我的论点没有通过.怎么了 ?我试图使用gdb但没有成功.
问候
既然你做++nargv,你nargv指针最终指向过去的数组的末尾.保留指向初始成员的指针并将其传递给exec.此外,*nargv++ = '\0'看起来像一个错误,因为您将char指定给char指针.