我的程序有一个可变数量的参数,我需要用新路径创建一个execv
,所以我想在不更改的情况下更改其他变量的值argv[1]
它,但它不会让我。将argv复制到另一个变量以更改它,而不更改原始
char** arg_exec = malloc(argc * sizeof (char*));
int i;
for(i=0;i <= argc-1; i++)
arg_exec[i] = strdup(argv[i]);
arg_exec[argc] = NULL;
if((pid = fork()) == 0){
arg_exec[1] = strcat(directory , dir_info->d_name); //some variables with the current path and a name
execv(arg_exec[0], arg_exec);
printf("Error in process %d\n", getpid());
return 1;
}
但它运行这行后arg_exec[1] = strcat(directory , dir_info->d_name);
它改变了我的argv [1]的价值,我的计划失败..
它好工作与execl
,因为它像execl(argv[0],strcat(directory , dir_info->d_name), ..., NULL);
而是因为我有一个可变数量的参数来运行它,这不是很好的实现这种方式。
EDIT1:在阵列 EDIT2的末尾添加NULL
:我做一个版本的find
的,所以strcat的会添加到当前目录下的一个文件夹来看看。 这是目录中的初始化: char *directory = strcat(argv[1],"/");
背后的想法是什么:'arg_exec [1] = strcat(directory,dir_info-> d_name);'?那么'directory'是如何定义和创建的呢? – alk
我正在做一个'find'的版本,所以strcat会在当前目录中添加一个文件夹来查看 –
引用“* Edit1 *”:你错过了调整要分配的数组元素的数量。 – alk